- 转载请注明作者和出处:http://blog.csdn.net/u011475210
- 代码地址:https://github.com/WordZzzz/Note/tree/master/AtOffer
- 刷题平台:https://www.nowcoder.com/
- 题 库:剑指offer
- 编 者:WordZzzz
题目描述
输入两个树节点,求他们的最低公共祖先。
解题思路
求树中两个节点的最低公共祖先,不能说只是一个题目,而应该说是一组题目。不同条件下的题目解法是完全不一样的,比如,是否是二叉树、二叉排序树;如果不是二叉树,是否有指向父节点的指针(是的话可以转换成求两个链表的第一个公共节点,不是的话可以转换成求两个链表的最后一个公共节点)。
下面的代码针对的是普通树,并且没有指向父节点的指针,所以我们转换成求两个链表的最后一个公共节点。代码中GetNodePath用来得到根节点pRoot开始到达节点pNode的路径,这条路径保存在path中,函数GetLastCommonNode用来得到两个路径path1和path2的最后一个公共节点。函数GetLastCommonParent先调用GetNodePath得到pRoot到达pNode1的路径path1,再得到pRoot到达pNode2的路径path2,接着调用GetLastCommonNode得到path1和path2的最后一个公共节点,即我们要找的最低公共祖先。
C++版代码实现
1 | bool GetNodePath(const TreeNode* pRoot, const TreeNode* pNode, list<const TreeNode*>& path) |
系列教程持续发布中,欢迎订阅、关注、收藏、评论、点赞哦~~( ̄▽ ̄~)~
完的汪(∪。∪)。。。zzz