摘要: 思路很简单,因为只有两个节点互换了,只需要找到这两个节点,再换回来即可 可是怎么找到这两个节点呢? 方法一 直接中序遍历得到一个数组arr1,然后新建一个数组arr2,copy arr1,将其排序 对比arr1和arr2,很容易就能找到不同的两个节点,互换即可 时间复杂度为o(nlogn) 方法二 阅读全文
posted @ 2019-08-19 03:20 南山南北秋悲 阅读(167) 评论(0) 推荐(0) 编辑
摘要: 可以用bfs,先序中序后序4种解法 我觉得bfs比较好写,所以就用了bfs 阅读全文
posted @ 2019-08-19 01:42 南山南北秋悲 阅读(147) 评论(0) 推荐(0) 编辑
摘要: 中序遍历,计数器数到k时,输出当前节点值 阅读全文
posted @ 2019-08-18 10:14 南山南北秋悲 阅读(108) 评论(0) 推荐(0) 编辑
摘要: class BSTIterator { private Stack stack; public BSTIterator(TreeNode root) { stack = new Stack(); while(root != null){ stack.push(root); root = root... 阅读全文
posted @ 2019-08-18 09:03 南山南北秋悲 阅读(75) 评论(0) 推荐(0) 编辑
摘要: 其实就是一个二分搜索 首先遍历LinkedList,记下链表长度 然后从mid开始, mid.left = 左部的mid mid.right = 右部的mid 依次递归,因为这相当于一个中序遍历,调用栈的最底层是从LinkedList首个元素开始的 阅读全文
posted @ 2019-08-18 08:06 南山南北秋悲 阅读(171) 评论(0) 推荐(0) 编辑
摘要: 其实就是一个二分搜索 mid为当前root, 然后分别用左右两个部分完成左右子树的构建 阅读全文
posted @ 2019-08-16 02:01 南山南北秋悲 阅读(121) 评论(0) 推荐(0) 编辑
摘要: 看看什么是最低共同祖先,就是第一个左右分别存在p和q的节点 还是正常dfs,当遇到null返回null,遇到p返回p,遇到q返回q 若left 和 right 都不为null则说明这就是我们要找的节点 阅读全文
posted @ 2019-08-16 01:58 南山南北秋悲 阅读(96) 评论(0) 推荐(0) 编辑
摘要: 最低共同祖先,肯定值处于两者之间,而且是第一个这样的节点 所以就像二分搜索一样,当前节点值都大于p和q,则向左走,反之向右走 当碰到介于两者之间时,说明当前节点就是我们要找的 阅读全文
posted @ 2019-08-16 01:49 南山南北秋悲 阅读(129) 评论(0) 推荐(0) 编辑
摘要: 按题意检查即可 可以递归,会比较好理解,逐渐收缩max和min 也可以迭代,利用中序遍历 阅读全文
posted @ 2019-08-16 01:43 南山南北秋悲 阅读(141) 评论(0) 推荐(0) 编辑
摘要: 不就是bfs,然后返回每层最后一个节点值吗 阅读全文
posted @ 2019-08-16 01:32 南山南北秋悲 阅读(118) 评论(0) 推荐(0) 编辑