剑指 Offer 68 - I. 二叉搜索树的最近公共祖先(235. 二叉搜索树的最近公共祖先)

题目:

 

 

思路:

【1】首先这题不难,难的是对题目的理解,说的很绕,但是很简单:就是节点p 和 q遇到的第一个将它们分在两边的节点,就是公共先祖。

代码展示:

//时间5 ms击败100%
//内存42.4 MB击败71.74%
//时间复杂度:O(n),其中 nnn 是给定的二叉搜索树中的节点个数。
//而在最坏的情况下,树呈现链式结构,p 和 q 一个是树的唯一叶子结点,一个是该叶子结点的父节点,此时时间复杂度为 Θ(n)。
//空间复杂度:O(1)。
/**
 * 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) {
        TreeNode res = root;
        while (true) {
            if (p.val < res.val && q.val < res.val) {
                res = res.left;
            } else if (p.val > res.val && q.val > res.val) {
                res = res.right;
            } else {
                break;
            }
        }
        return res;
    }
}

 

posted @ 2023-02-21 11:05  忧愁的chafry  阅读(10)  评论(0编辑  收藏  举报