LCR 193.二叉搜索树的最近公共祖先

题目来源:

        leetcode题目,网址:LCR 193. 二叉搜索树的最近公共祖先 - 力扣(LeetCode)

解题思路:

        获得从根节点指向两节点的链路后,返回两链路上的最后一个相同节点即可。

解题代码:

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 * };
 */
class Solution {
public:
    TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) {
        stack stackp=getStack(root,p);
        stack stackq=getStack(root,q);
        int size=min(stackp.size(),stackq.size());
        while(stackp.size()>size){
            stackp.pop();
        }
        while(stackq.size()>size){
            stackq.pop();
        }
        while(stackq.top()!=stackp.top()){
            stackp.pop();
            stackq.pop();
        }
        return stackq.top();
    }
    stack getStack(TreeNode*root,TreeNode* pur){
        stack mystack;
        mystack.push(root);
        while(mystack.top()!=pur){
            TreeNode* temp=mystack.top();
            if(temp->val>pur->val){
                mystack.push(temp->left);
            }else{
                mystack.push(temp->right);
            }
        }
        return mystack;
    }
};
 
  

总结:

        官方题解给出了两种解法,第一种是两次遍历之后寻找公共祖先。第二种是一次遍历,当出现两个目标节点其中一个与当前节点相等或分别在当前节点两侧时,当前节点即为所求。


你可能感兴趣的:(#,C++,LeetCode,C++)