leetcode 235.二叉搜索树的最近公共祖先

  其实就是一个求LCA的模板问题。

  我的实现方法是在p、q上分别打一个标记。然后递归把标记向上传递。当找到一个拥有两个标记的节点,它就是最近公共祖先。

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 * };
 */

TreeNode* result;
bool LCA(TreeNode* now,TreeNode* p,TreeNode* q){
    if (now==NULL) return false;
    int cnt=0;
    if (now==p) cnt+=1;
    if (now==q) cnt+=1;
    cnt+=LCA(now->left,p,q);
    cnt+=LCA(now->right,p,q);
    if (cnt==1)     return true;
    else if (cnt==2){
        result=now;
        return false;
    }
    return false;
}


class Solution {
public:
    TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) {
        result=NULL;
        LCA(root,p,q);
        return result;
    }
};

 

上一篇:BZOJ2125: 最短路(圆方树)


下一篇:P7518 & 省选联考2021 宝石