LeetCode 题解:236. 二叉树的最近公共祖先,递归,JavaScript,详细注释
原题链接:https://leetcode-cn.com/problems/lowest-common-ancestor-of-a-binary-tree/
解题思路:
使用递归遍历所有节点,如果一个节点的左右子树中同时含有 p 和 q,则它就是最近公共祖先。
递归终止条件有两种:
* 如果当前节点是 p 或 q,则将其返回。
* 如果当前节点为空,则退出循环。
递归分别下探到左右子节点,同时获取他们的返回值,返回值存在两种情况:
* 如果返回值同时含有 p 和 q,表示当前节点为公共祖先,则将其返回。由于第一次遇到公共祖先后,就会将其返回,其上层的递归不会在遇到 p 货 q,那么这个节点必然为最近公共祖先。
* 如果返回值不同时含有 p 或 q,则将其中之一返回给上层递归判断。如果 p 或 q 自身就是最近公共祖先,其自身就会不断被返回,成为递归的最终结果。
复制代码
版权声明: 本文为 InfoQ 作者【Lee Chen】的原创文章。
原文链接:【http://xie.infoq.cn/article/f2289643e11b1e1da1d331671】。文章转载请联系作者。
评论