二叉树的最近公共祖先

在二叉树中找到两个节点的最近公共祖先

http://www.nowcoder.com/questionTerminal/e0cc33a83afe4530bcec46eba3325116

若root是p,q的最近公共祖先,则只可能为以下情况之一:

  1. p和q在root的子树中,且分列root的异侧(即分别在左、右子树中);
  2. p=root,且q在root的左或右子树中;
  3. q=root,且p在root的左或右子树中;
    /**
    * struct TreeNode {
    *    int val;
    *    struct TreeNode *left;
    *    struct TreeNode *right;
    * };
    */
    class Solution {
    public:
     /**
      * 
      * @param root TreeNode类 
      * @param o1 int整型 
      * @param o2 int整型 
      * @return int整型
      */
     TreeNode *ret;
     bool dfs(TreeNode *root,int o1,int o2)
     {
         if(!root)
             return false;
         bool l=dfs(root->left,o1,o2);
         bool r=dfs(root->right,o1,o2);
         if((l&&r)||((root->val==o1||root->val==o2)&&(l||r)))
    //判断root是否包含o1和o2或root值为o1或o2且o2或o1出现在root子树中
         {
             ret=root;
         }
         return l||r||root->val==o1||root->val==o2;
     }
     int lowestCommonAncestor(TreeNode* root, int o1, int o2) {
         dfs(root,o1,o2);
             return ret->val;
     }
    };
全部评论

相关推荐

不愿透露姓名的神秘牛友
02-14 11:10
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
昨天 22:33
杉川机器人 嵌入式工程师 18.0k*13.0, 年终奖1~9个月
点赞 评论 收藏
分享
昨天 00:16
已编辑
湖北大学 Java
Java抽象带篮子:java简历怎么写可以看看我发的帖子,很详细的
点赞 评论 收藏
分享
评论
4
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务