描述
给一个二叉查找树(什么是二叉查找树),以及一个节点,求该节点的中序遍历后继,如果没有返回null
注意事项
It's guaranteed p is one node in the given tree. (You can directly compare the memory address to find p)
样例
给出 tree = [2,1] node = 1:
返回 node 2.
代码
当根节点值小于等于p节点值,说明p的后继节点一定在右子树中,所以对右子节点递归调用此函数,如果根节点值大于p节点值,那么有可能根节点就是p的后继节点,或者左子树中的某个节点是p的后继节点,所以先对左子节点递归调用此函数,如果返回空,说明根节点是后继节点,返回即可,如果不为空,则将那个节点返回。
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
public class Solution {
/*
* @param root: The root of the BST.
* @param p: You need find the successor node of p.
* @return: Successor of p.
*/
TreeNode pre=null;
public TreeNode inorderSuccessor(TreeNode root, TreeNode p) {
// write your code here
if(root==null||p==null){
return null;
}
if(root.val<=p.val){
return inorderSuccessor(root.right,p);
}else{
TreeNode left=inorderSuccessor(root.left,p);
return left!=null?left:root;
}
}
}