C/C++教程

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

本文主要是介绍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;
    }
};

 

这篇关于leetcode 235.二叉搜索树的最近公共祖先的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!