1. 程式人生 > >LeetCode235:Lowest Common Ancestor of a Binary Search Tree

LeetCode235:Lowest Common Ancestor of a Binary Search Tree

itself 一個 post 特性 || arc order amp ear

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.

二叉搜索樹的最低公共祖先節點。

因為二叉搜索樹的特性,即不論什麽一個節點的左子樹中的節點值都比該節點值小。不論什麽一個節點的右子樹中的節點值都比該節點值大。能夠依據這個特性在二叉樹中查找。

對於給定的兩個節點指針p和q,先調整p和q,使p指向值較小的那個節點。q指向值較大的那個節點;

然後從根節點node開始遍歷,假設q的值小於node的值,表示p和q都在node的左子樹中,更新node為node->left。

假設p的值大於node的值。表示p和q都在node的右子樹中,更新node為node->right;

否則表示找到的這個節點就是p和q的最低公共祖先節點。

runtime:40ms

/**
 * 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) {
            if(root==NULL||p==NULL||q==NULL)
            return NULL;
            
            //使p保存值較小的節點。q保存值較大的節點
            if(p->val > q->val)
            {
                /*
                TreeNode *tmp=p;
                p=q;
                q=tmp;
                */
                //上面的代碼能夠直接寫成以下的樣子
                swap(p,q);
            }
            
            TreeNode *result=root;
            while(true)
            {
                if(q->val < result->val)
                    result=result->left;
                else if(p->val >result->val)
                    result=result->right;
                else
                    return result;
            }
    }
};



LeetCode235:Lowest Common Ancestor of a Binary Search Tree