博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Lintcode---最近公共祖先
阅读量:6151 次
发布时间:2019-06-21

本文共 1894 字,大约阅读时间需要 6 分钟。

给定一棵二叉树,找到两个节点的最近公共父节点(LCA)。

最近公共祖先是两个节点的公共的祖先节点且具有最大深度。

 注意事项

假设给出的两个节点都在树中存在

样例

对于下面这棵二叉树

4 / \3   7   / \  5   6

LCA(3, 5) = 4

LCA(5, 6) = 7

LCA(6, 7) = 7

 

思路:如果两个节点分别在根节点的左子树和右子树,则返回根节点。

     如果两个节点都在左子树,则递归处理左子树,如果两个节点都在右子树,则递归处理右子树。
          
     经典笔试题目,要熟练!

 

/** * Definition of TreeNode: * class TreeNode { * public: *     int val; *     TreeNode *left, *right; *     TreeNode(int val) { *         this->val = val; *         this->left = this->right = NULL; *     } * } */class Solution {public:    /**     * @param root: The root of the binary search tree.     * @param A and B: two nodes in a Binary.     * @return: Return the least common ancestor(LCA) of the two nodes.     */    /*    思路:如果两个节点分别在根节点的左子树和右子树,则返回根节点。          如果两个节点都在左子树,则递归处理左子树,如果两个节点都在右子树,则递归处理右子树。                    这是经典笔试题目,要熟练!    */    bool FindNode(TreeNode* root,TreeNode* p){        if(root==NULL||p==NULL){            return false;        }                if(root==p){            return true;        }                bool found=FindNode(root->left,p);        if(!found){            found=FindNode(root->right,p);        }                return found;    }    TreeNode *lowestCommonAncestor(TreeNode *root, TreeNode *A, TreeNode *B) {        // write your code here                if(root==NULL){            return NULL;        }                if(root==A||root==B){            return root;        }        if(FindNode(root->left,A)){            if(FindNode(root->right,B)){                return root;            }            else{                return lowestCommonAncestor(root->left,A,B);            }        }        else{            if(FindNode(root->left,B)){                return root;            }            else{                return lowestCommonAncestor(root->right,A,B);            }        }            }};

 

 

另一种思路:

 

先求出从根节点到两个节点的路径;

然后比较两条路径,最后一个相同的节点就是他们在二叉树中的最低公共祖先。

其实将问题转化为求链表第一个相交的节点。

 

 

转载地址:http://ezwfa.baihongyu.com/

你可能感兴趣的文章
Yii2单元测试初探
查看>>
五、字典
查看>>
前端js之JavaScript
查看>>
Log4J日志配置详解
查看>>
实验7 BindService模拟通信
查看>>
scanf
查看>>
Socket编程注意接收缓冲区大小
查看>>
SpringMVC初写(五)拦截器
查看>>
检测oracle数据库坏块的方法
查看>>
SQL server 安装教程
查看>>
Linux下ftp和ssh详解
查看>>
跨站脚本功攻击,xss,一个简单的例子让你知道什么是xss攻击
查看>>
js时间和时间戳之间如何转换(汇总)
查看>>
js插件---图片懒加载echo.js结合 Amaze UI ScrollSpy 使用
查看>>
java中string和int的相互转换
查看>>
P1666 前缀单词
查看>>
HTML.2文本
查看>>
Ubuntu unity安装Indicator-Multiload
查看>>
解决Eclipse中新建jsp文件ISO8859-1 编码问题
查看>>
7.对象创建型模式-总结
查看>>