[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 }
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 二叉搜索树中的中序后继节点