c_cpp 236.二叉树的最低共同祖先 - 难度中等 - 2018.9.13

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c_cpp 236.二叉树的最低共同祖先 - 难度中等 - 2018.9.13相关的知识,希望对你有一定的参考价值。

//递归法:
class Solution {
public:
    TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) {
        if (root == p || root == q || root == NULL) {
            return root;
        }
        TreeNode *l = lowestCommonAncestor(root->left, p, q);
        TreeNode *r = lowestCommonAncestor(root->right, p, q);
        if (l && r) {
            return root;
        }
        return l ? l : r;
    }
};

//递归找寻节点,匹配最长公共路径:
class Solution {
public:
    // 找寻路径数组
    bool dfs(TreeNode* root, TreeNode *t, vector<TreeNode *>& tV) {
        if (root == NULL) {
            return false;
        }
        tV.push_back(root);
        if (root == t) {
            return true;
        }
        if (dfs(root->left, t, tV)) {
            return true;
        }
        if (dfs(root->right, t, tV)) {
            return true;
        }
        tV.pop_back();
        return false;
    }
    TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) {
        vector <TreeNode *> pDFSVec;
        dfs(root, p, pDFSVec);
        vector <TreeNode *> qDFSVec;
        dfs(root, q, qDFSVec);
        TreeNode *re;
        // 匹配公共节点
        for (int i = 0; i < min(pDFSVec.size(), qDFSVec.size()); i++) {
            if (pDFSVec[i] != qDFSVec[i]) {
                break;
            }
            re = pDFSVec[i];
        }
        return re;
    }
};

以上是关于c_cpp 236.二叉树的最低共同祖先 - 难度中等 - 2018.9.13的主要内容,如果未能解决你的问题,请参考以下文章

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

java 二叉树的最低共同祖先

LeetCode Java刷题笔记—236. 二叉树的最近公共祖先

c_cpp LCA,lca,二叉树的最低共同的ancester

LeetCode 236. 二叉树的最近公共祖先

LeetCode 236. 二叉树的最近公共祖先