Skip to the content.

不使用 stack

最近公共祖先

没有什么高级实现,就是做深度遍历,谁最开始发现两个 node,谁就是 lowest-common-ancestor

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

class Solution {
public:
    TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) {
        if (!root || root == p || root == q) return root;

        TreeNode* left = lowestCommonAncestor(root->left, p, q);
        TreeNode* right = lowestCommonAncestor(root->right, p, q);

        if (left && right) return root;   // p、q 分居两侧,root 就是 LCA
        return left ? left : right;       // 否则把找到的那一边往上传递
    }
};

这里实现有一个小小的技巧,如果 LCA 找到了,那么可以直接向上传递。

红黑树

本站所有文章转发 CSDN 将按侵权追究法律责任,其它情况随意。