NO.236 二叉树的最近公共祖先 中等
思路一:深搜 去根节点的左右子树中寻找 p 和 q 两个节点:
返回条件:如果左子树或右子树为空,则返回 null;如果左子树或右子树中找到了 p 或者 q ,这棵子树一定返回 p 或 q 。
递归分别去左右子树中深搜寻找 p 或 q,左右子树深搜的结果记为 left 、right ,深搜全部完成后,如果 left 为空,则结果只需要看 right 标记的节点(p 或 q);如果 right 为空,只需要看 left ;如果 right 和 left 都不为空,这说明左右子树的根节点 root 是 p 和 q 的公共祖先,此时 p 和 q 分别在 root 的左右子树中,一边一个。
1 | public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) { |
时间复杂度:O(n) 深度遍历
空间复杂度:O(n) 递归栈大小取决于树的深度,最坏情况树呈链表状
本人菜鸟,有错误请告知,感激不尽!
更多题解和源码:github