本文主要是介绍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<TreeNode*> stackp=getStack(root,p);stack<TreeNode*> 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<TreeNode*> getStack(TreeNode*root,TreeNode* pur){stack<TreeNode*> 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;}
};
总结:
官方题解给出了两种解法,第一种是两次遍历之后寻找公共祖先。第二种是一次遍历,当出现两个目标节点其中一个与当前节点相等或分别在当前节点两侧时,当前节点即为所求。
这篇关于LCR 193.二叉搜索树的最近公共祖先的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!