[LeetCode] 285. Inorder Successor in BST

Posted aaronliu1991

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[LeetCode] 285. Inorder Successor in BST相关的知识,希望对你有一定的参考价值。

二叉搜索树中的顺序后继。题意是给一个二叉搜索树和一个节点,请返回这个节点中序遍历的下一个节点。例子,

技术图片

Input: root = [2,1,3], p = 1
Output: 2
Explanation: 1‘s in-order successor node is 2. Note that both p and the return value is of TreeNode type.

既然题目都讲明了是中序遍历所以没什么好说的,照着遍历就是了。我这里给出迭代的写法。如果根节点不为空,判断节点p跟root的大小关系,如果p较小,说明root有可能就是p的中序后继,将root赋给res,往左子树走;如果p较大,p的中序后继也只会是在root的右边,所以往右走。给一个更好的例子吧,如果找的p是35,因为比根节点25大,所以一开始就只能往右子树走,root = 50;再跟50判断,因为35比50小所以把50赋给res,往左子树走,root = 35;此时因为root = 35 <= p所以又得往右走,root = 44;下一轮44 > 35了所以res = 44;最后一轮root为空了,直接跳出while循环,得到res = 44。

技术图片

时间O(n)

空间O(1)

Java实现

 1 class Solution {
 2     public TreeNode inorderSuccessor(TreeNode root, TreeNode p) {
 3         if (root == null) {
 4             return null;
 5         }
 6         TreeNode res = null;
 7         while (root != null) {
 8             if (root.val > p.val) {
 9                 res = root;
10                 root = root.left;
11             } else {
12                 root = root.right;
13             }
14         }
15         return res;
16     }
17 }

 

javascript实现

 1 /**
 2  * @param {TreeNode} root
 3  * @param {TreeNode} p
 4  * @return {TreeNode}
 5  */
 6 var inorderSuccessor = function (root, p) {
 7     if (root == null) {
 8         return null;
 9     }
10     let res = null;
11     while (root != null) {
12         if (root.val > p.val) {
13             res = root;
14             root = root.left;
15         } else {
16             root = root.right;
17         }
18     }
19     return res;
20 };

 

以上是关于[LeetCode] 285. Inorder Successor in BST的主要内容,如果未能解决你的问题,请参考以下文章

[LeetCode] 285. Inorder Successor in BST

[LeetCode] 285. Inorder Successor in BST 二叉搜索树中的中序后继节点

285. Inorder Successor in BST

285. Inorder Successor in BST

[LC] 285. Inorder Successor in BST

285. Inorder Successor in BST - Medium