Given a binary search tree (BST), find the lowest common ancestor (LCA) of two given nodes in the BST.
According to the definition of LCA on Wikipedia: “The lowest common ancestor is defined between two nodes v and w as the lowest node in T that has both v and w as descendants (where we allow a node to be a descendant of itself).”
_______6______ / \ ___2__ ___8__ / \ / \ 0 _4 7 9 / \ 3 5
For example, the lowest common ancestor (LCA) of nodes 2
and 8
is 6
. Another example is LCA of nodes 2
and 4
is 2
, since a node can be a descendant of itself according to the LCA definition.
==================
题目:在平衡二叉树中寻找任意两个节点的公共祖先
思路:
利用while循环,就可以循环遍历BST树,
判断的条件如下:
如果p,q都小于root,那么在root的左子树中查找
如果p,q都大于root,那么在root的右子树中查找
如果p,q在root的两边,那么root就是要求得公共节点
如果q,q中有一个与root指针相同,那么返回root即可。
=======
code:
/** * 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) { TreeNode *tmp =root; while(tmp!=nullptr){ if(p->val<tmp->val && q->val<tmp->val){ tmp = tmp->left; }else if(p->val>tmp->val && q->val>tmp->val){ tmp = tmp->right; }else if((p->val>tmp->val && q->val<tmp->val) || (p->val<tmp->val && q->val>tmp->val)){ return tmp; }else if(p->val==tmp->val){ return p; }else if(q->val==tmp->val){ return q; } }//while return nullptr; }//end-function };