本文主要是介绍LeetCode 235. 二叉搜索树的最近公共祖先 (递归),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
思路
利用二叉搜索树的性质,左子树中的值都小于根节点,右子树中的值都大于根节点;
- 根据题意要找到公共父节点,也就是说,p和q在一个节点的两端,即一个大于根节点,一个小于根节点
- 所以可以使用递归的方式,如果p和q同时小于或者大于根节点,就去他的对应的左子树(同时小于都在左子树中)和右子树(同时大于都在右子树中)中寻找。
- 直到找到不同时大于或者小于的根节点,就是他们的最近公共父节点(第一次遇到这样的节点,一定是最近的)
代码实现
/*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode(int x) { val = x; }* }*/class Solution {TreeNode res = null;public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {res = root;// 如果两个节点,不能同时大于或同时小于一个节点,那么这个节点就是他们的最近公共祖先if(root.val < p.val && root.val < q.val) res = lowestCommonAncestor(root.right, p, q);if(root.val > p.val && root.val > q.val) res = lowestCommonAncestor(root.left, p, q);return res;}
}
这篇关于LeetCode 235. 二叉搜索树的最近公共祖先 (递归)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!