摘要: 注意层序遍历的时候对每一层的处理方式可能不同,这里把每一层的元素保存进一个List中了,那么就需要记录每一层的数量。 public List search(TreeNode root){ List result = new ArrayList (); Queue queue = new Linked 阅读全文
posted @ 2019-10-09 10:34 CrazyJack 阅读(110) 评论(0) 推荐(0)
摘要: (输入两个整数序列,第一个序列是一串数字的压入顺序,判断第二个序列是否是该栈数字的弹出顺序。) 我的方法:压入序列是给定的,每一次弹出操作形成一个弹出序列的值,我们从前往后遍历弹出序列,每一次访问弹出序列都代表了一次弹出操作,弹出的值必然是当前栈顶的元素或者是在剩余没有压入的元素序列中。 我们要做的 阅读全文
posted @ 2019-10-09 10:27 CrazyJack 阅读(131) 评论(0) 推荐(0)
摘要: (min函数的作用是返回栈内最小值) 首先这个栈要具有普通栈所具有的push()和pop()方法,那么内部一定包含一个Stack。至于还要能实现min函数,而且还是在O(1)时间复杂度内,我们不得不考虑用额外的空间。 如果直接使用一个int变量存储当前的最小值,我们的确可以获得最小值,但是当 栈po 阅读全文
posted @ 2019-10-09 10:17 CrazyJack 阅读(131) 评论(0) 推荐(0)
摘要: 我的方法:遇到这种题最好在纸上画一画打印路线。我利用了4个标志left、top、right、bottom,表示 当前需要打印的左界、上届、右界和下界 ,换句话说 这些界线之外 的已经打印了,如此一来判断结束的标准也很清晰,top bottom或者left right就表示已经没有需要打印的空间。和第 阅读全文
posted @ 2019-10-07 11:23 CrazyJack 阅读(196) 评论(0) 推荐(0)
摘要: 书中方法:这道题目可能拿到手没有思路,我们可以在纸上画出简单的二叉树来找到规律。最后我们发现,镜像的实质是对于二叉树的所有节点,交换其左右子节点。搞清楚获得镜像的方法,这道题实际上就变成了一道二叉树遍历的变形。这里选择前序遍历二叉树。 如果改成循环实现:实际上也就是把 递归 改成 循环 前序遍历二叉 阅读全文
posted @ 2019-10-07 11:08 CrazyJack 阅读(186) 评论(0) 推荐(0)
摘要: (输入两棵二叉树A和B,判断B是不是A的子结构。补充下,根据书中的代码来看,子结构的定义并不包括叶子节点下的null,也就是说只要B的存在数字的结构存在于A中就行,那么如果B是null树,那么就不属于A的子结构) 书中方法:书上的方法十分清晰,分为两个步骤,先在A树中找到B树的root.val,然后 阅读全文
posted @ 2019-09-30 11:41 CrazyJack 阅读(340) 评论(0) 推荐(0)
摘要: 我的方法:新初始化一个链表头,比较两个链表当前节点的大小,然后连接到该链表中。遍历两个链表直到null为止。 public ListNode merge(ListNode first, ListNode second){ //注意这个细节 ListNode head = new ListNode(0 阅读全文
posted @ 2019-09-30 11:34 CrazyJack 阅读(127) 评论(0) 推荐(0)
摘要: (输入链表的头节点,反转链表) 书中方法:对于一个链表,我们只能从头往后遍历,如果要反转,我们需要更改当前节点的next域指向前一个节点,此时链表断开,为了能继续修改下一个节点的next域,我们还要维护下一个节点。 方法二:书后面还提到了 递归 的方法。自己写的逻辑比较不清楚,在网上找了一个版本。这 阅读全文
posted @ 2019-09-30 11:26 CrazyJack 阅读(180) 评论(0) 推荐(0)
摘要: 书中方法:用两个节点一次遍历求得倒数第k个节点。注意头节点为空,k 阅读全文
posted @ 2019-09-30 11:23 CrazyJack 阅读(164) 评论(0) 推荐(0)
摘要: (输入整数数组,使所有奇数位于前半部分,所有偶数位于后半部分。) 我的方法:想到用两个下标分别表示奇数和偶数的界线,一个在开头,一个在末尾,判断每一个数字的类别,然后将它放入对应的范围内,移动下标,直至两个下标相遇。两个下标,第一个index表示当前要检测的数字以及其左边的数字为奇数(所以当前要检测 阅读全文
posted @ 2019-09-30 11:05 CrazyJack 阅读(516) 评论(0) 推荐(0)