摘要: 其实就是一个二分搜索 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) 编辑
摘要: 利用双向队列 偶数层当栈用, 奇数层当队列用 阅读全文
posted @ 2019-08-16 01:30 南山南北秋悲 阅读(109) 评论(0) 推荐(0) 编辑
摘要: 正常做bfs,然后List添加的时候,从头部开始添加add(0, ...) 阅读全文
posted @ 2019-08-16 01:25 南山南北秋悲 阅读(116) 评论(0) 推荐(0) 编辑
摘要: 先看递归的解法 无非就是取recur(root) + recur(root孙子节点)… 和 recur(root.left) + recur(root.right)的最大值 但是递归会反复求解之前求过的值,比如求recur(root.left)时又会重新求一遍recur(root孙子节点) 这个时候 阅读全文
posted @ 2019-08-16 01:20 南山南北秋悲 阅读(128) 评论(0) 推荐(0) 编辑
摘要: 常规思路就是走一遍dfs找出叶子节点,记录,删除叶子节点,反复直到树空,时间复杂度为o(n!) 但是,我们可以通过记录当前节点到叶子节点的距离,来完成题目要求,只需要一遍dfs,时间复杂度为o(n) 阅读全文
posted @ 2019-08-16 01:07 南山南北秋悲 阅读(156) 评论(0) 推荐(0) 编辑
摘要: 思路很简单,存在最优子结构,用递归自上至下解即可。 如何判断当前root所代表的树是否为uni-value subtree? 1. 检查root和left,right值是否一致 2. left子树和right子树是否都为uni-value 注意第二步,可能left,right为空,写if时要注意 阅读全文
posted @ 2019-08-16 00:43 南山南北秋悲 阅读(316) 评论(0) 推荐(0) 编辑