简直想不清楚!!!
iterative:
TreeNode* inorderSuccessor(TreeNode* root, TreeNode* p) {
TreeNode* candidate = NULL;
while (root)
root = (root->val > p->val) ? (candidate = root)->left : root->right;
return candidate;
}
recursive:
public TreeNode successor(TreeNode root, TreeNode p) {
if (root == null)
return null;
if (root.val <= p.val) {
return successor(root.right, p);
} else {
TreeNode left = successor(root.left, p);
return (left != null) ? left : root;
}
}
predecessor
public TreeNode predecessor(TreeNode root, TreeNode p) {
if (root == null)
return null;
if (root.val >= p.val) {
return predecessor(root.left, p);
} else {
TreeNode right = predecessor(root.right, p);
return (right != null) ? right : root;
}
}