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 };
                    
                

                
            
        
浙公网安备 33010602011771号