码迷,mamicode.com
首页 > 其他好文 > 详细

[LeetCode] 285. Inorder Successor in BST

时间:2020-03-20 13:12:43      阅读:66      评论:0      收藏:0      [点我收藏+]

标签:lse   note   param   直接   img   关系   amp   The   block   

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

技术图片

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

标签:lse   note   param   直接   img   关系   amp   The   block   

原文地址:https://www.cnblogs.com/aaronliu1991/p/12530798.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!