设计一个算法,找出二叉搜索树中指定节点的“下一个”节点(也即中序后继)。
如果指定节点没有对应的“下一个”节点,则返回null
。
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
TreeNode res = null;
TreeNode temp = null;
public TreeNode inorderSuccessor(TreeNode root, TreeNode p) {
inorder(root,p);
return res;
}
public void inorder(TreeNode root,TreeNode p){
if(root == null){
return;
}
inorder(root.left,p);
if(res != null){
return;
}
if(root.val == p.val){
if(root.right != null){
temp = root.right;
while(temp.left != null){
temp = temp.left;
}
res = temp;
return;
}
}else if(root.val > p.val){
res = root;
return;
}
inorder(root.right,p);
}
}
执行用时:2 ms, 在所有 Java 提交中击败了100.00%的用户
内存消耗:42.2 MB, 在所有 Java 提交中击败了56.71%的用户