题目
具体代码
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
public TreeNode inorderSuccessor(TreeNode root, TreeNode p) {
if(root == null){
return root;
}
//如果p存在右子树,那后继节点是右子树的最左孩子
if(p.right != null){
TreeNode node = p.right;
while(node.left != null){
node = node.left;
}
return node;
}
//如果p不存在右子树
//如果p小于root,node = root 那遍历node的左孩子,直到p等于node,那node的父节点就是p的后继节点
//如果p大于root,node = root 遍历node的右孩子,直到p<node,为上一种情况
else{
TreeNode res = null;
TreeNode node = root;
while(node != p){
if(p.val < node.val){
res = node;
node = node.left;
}else{
node = node.right;
}
}
return res;
}
}
}