剑指 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; } }