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

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

https://www.nowcoder.com/practice/e0cc33a83afe4530bcec46eba3325116

设置dfs函数寻找其中 cur 为当前处理到的节点,t 为需要找到的目的节点,path 为从根节点到当前节点 cur 所经过的路径。若能够以当前节点 cur 为根的子树包含目标节点 t,函数返回 true,否则返回 false。
调用函数分别传入 p 和 q 作为目标节点,从而得到从根节点到 p 和 q 的路径列表,遍历路径找到最后一个相同的节点即是答案。

class Solution {
  public:
    bool dfs(TreeNode* cur, int  t, vector<TreeNode*>& path) {
        if (!cur) return false;
        path.push_back(cur);
        if (cur->val == t || dfs(cur->left, t, path) || dfs(cur->right, t, path)) {
            return true;
        } else {
            path.pop_back();
            return false;
        }
    }
    int lowestCommonAncestor(TreeNode* root, int o1, int o2) {
        // write code here
        vector<TreeNode*> a, b;
        dfs(root, o1, a);
        dfs(root, o2, b);
        TreeNode* ans = nullptr;
        for (int i = 0; i < min(a.size(), b.size()) && a[i] == b[i]; i++) ans = a[i];
        return ans->val;

    }
};

全部评论

相关推荐

威猛的小饼干正在背八股:挂到根本不想整理
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务