码迷,mamicode.com
首页 > 其他好文 > 详细

leetcode [236. 二叉树的最近公共祖先]

时间:2020-05-10 17:06:00      阅读:59      评论:0      收藏:0      [点我收藏+]

标签:而且   思路   treenode   class   check   公共祖先   超级   题解   bool   

(https://leetcode-cn.com/problems/lowest-common-ancestor-of-a-binary-tree/)

自己写这一题墨迹那么长时间最后还是选了一个超级暴力的方法,不仅代码长,而且很慢.....

具体思路就是进行在对树进行后序遍历的时候,对每个点进行一次深搜,如果以该点为根节点的树中恰好含有p和q,那么这个点就是答案,因为后序遍历的性质就是从下往上进行遍历的。

class Solution {
public:
    TreeNode *ans,*p1,*q1;
    int num;
    bool flag;
    bool check(TreeNode* root){ //用来检查以这个点为根节点的树是否同时含有p和q
        num = 0;
        dfs2(root);
      //  cout<<num<<" ";
        if(num == 2) return true;
        return false;
    }
    void dfs2(TreeNode* root){
        if(root->val == p1->val || root->val == q1->val) num++;
        if(root->left) dfs2(root->left);
        if(root->right) dfs2(root->right);
    }
    void dfs(TreeNode* root){//进行后序遍历
        if(root->left && flag == false) dfs(root->left);
        if(root->right && flag == false) dfs(root->right);
        if(check(root) && flag == false) {ans = root;flag = true;}
    }
    TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) {
        q1 = q; p1 = p;
        flag = false;
        dfs(root);
        return ans;
    }
};

在写一下别人的思路:https://leetcode-cn.com/problems/lowest-common-ancestor-of-a-binary-tree/solution/236-er-cha-shu-de-zui-jin-gong-gong-zu-xian-hou-xu/ ,这个递归用的妙啊,最终答案无非就是两种情况,p和q其中一个为根节点,另一个在以这个点为根节点的树上;或者p和q在两个不同的子树上。具体看题解中的ppt比较好理解,我觉得现在的我是写不出来(菜

class Solution {
public:
    TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) {
        if(root == NULL || root == p || root == q) return root;
        TreeNode* left = lowestCommonAncestor(root->left,p,q);
        TreeNode* right = lowestCommonAncestor(root->right,p,q);
        if(left == NULL) return right;
        if(right == NULL) return left;
        return root;
    }
};

总结:有一个思路就紧抓着这个思路写下去,尽管它的效率很差,最起码先写出来之后在考虑优化问题,不要在几种方法之间来回摇摆,不然到最后都写不出来..

leetcode [236. 二叉树的最近公共祖先]

标签:而且   思路   treenode   class   check   公共祖先   超级   题解   bool   

原文地址:https://www.cnblogs.com/Beic233/p/12863610.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!