235. Lowest Common Ancestor of a Binary Search Tree

来源:互联网 发布:深圳盘古数据上市了没 编辑:程序博客网 时间:2024/06/05 06:16

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.

思路就是利用二叉树的特点。

/** * 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->val > max(p->val,q->val))        {           return lowestCommonAncestor(root->left, p, q);        }        else if(root->val < min(p->val,q->val))        {            return lowestCommonAncestor(root->right, p, q);        }        else        {            return root;         }    }};

引申:如果不是二叉树,是普通的树应该怎么做。普通树又分有没有定义parent。没有parent的时候就是遍历,分别找到两个node的parent,再往回回溯。(理解的不是特别清楚,还需要再想想。)

http://www.cnblogs.com/springfor/p/4141924.html

0 0
原创粉丝点击