二叉搜索树的公共祖先
题目描述
力扣链接🔗

代码思路
递归法
使用二叉搜索树的性质,最近祖先就是在p,q区间,根据搜索二叉树的二叉树进行递归,注意此时找的是根节点,递归到刚好在那个区间的时候返回,那么此时就是最近的公共祖先节点。注意只遍历一条边,要返回值。
/*** 递归法** @param root* @param p* @param q* @return*/public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {if (root == null) {return root;}if (root.val > p.val && root.val > q.val) { // 都大于搜索的值的话,向左边搜索,此时不知道p,q大小,需要都做判断TreeNode left = lowestCommonAncestor(root.left, p, q);if (left != null) { // 只遍历一条边,此时如果找到直接返回return left;}} else if (root.val < p.val && root.val < q.val) { // 都小于搜索的值的话,向右边搜索,此时不知道p,q大小,需要都做判断TreeNode right = lowestCommonAncestor(root.right, p, q);if (right != null) {return right;}}return root;}
迭代法
/*** 迭代法** @param root* @param p* @param q* @return*/public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {while (root != null) {if (root.val > p.val && root.val > q.val) {root = root.left;} else if (root.val < p.val && root.val < q.val) {root = root.right;}else {return root;}}return null;}
