给定一棵二叉搜索树, 找到该树中两个指定节点的最近公共祖先。
详见:https://leetcode.com/problems/lowest-common-ancestor-of-a-binary-search-tree/description/
Java实现:
方法一:
/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */ class Solution { public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) { if(root==null){ return null; } if(root.val>Math.max(p.val,q.val)){ return lowestCommonAncestor(root.left,p,q); } if(root.val<Math.min(p.val,q.val)){ return lowestCommonAncestor(root.right,p,q); } return root; } }
方法二:
/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */ class Solution { public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) { if(root==null||root==p||root==q){ return root; } TreeNode left=lowestCommonAncestor(root.left,p,q); TreeNode right=lowestCommonAncestor(root.right,p,q); if(left!=null&&right!=null){ return root; } return left!=null?left:right; } }
C++实现:
方法一:
/** * 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==nullptr) { return root; } if(root->val>max(p->val,q->val)) { return lowestCommonAncestor(root->left,p,q); } if(root->val<min(p->val,q->val)) { return lowestCommonAncestor(root->right,p,q); } return root; } };
方法二:
/** * 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==nullptr||root==p||root==q) { return root; } TreeNode *left=lowestCommonAncestor(root->left,p,q); TreeNode *right=lowestCommonAncestor(root->right,p,q); if(left&&right) { return root; } return left?left:right; } };
参考:http://www.cnblogs.com/grandyang/p/4640572.html