设计一个算法,找出二叉搜索树中指定节点的“下一个”节点(也即中序后继)。

    如果指定节点没有对应的“下一个”节点,则返回null。

    示例 1:

    输入: root = [2,1,3], p = 1

    2
    / \
    1 3

    输出: 2
    示例 2:

    输入: root = [5,3,6,2,4,null,null,1], p = 6

    1. 5<br /> / \<br /> 3 6<br /> / \<br /> 2 4<br /> / <br />1

    输出: null


    1. /**
    2. * Definition for a binary tree node.
    3. * public class TreeNode {
    4. * int val;
    5. * TreeNode left;
    6. * TreeNode right;
    7. * TreeNode(int x) { val = x; }
    8. * }
    9. */
    10. class Solution {
    11. public TreeNode inorderSuccessor(TreeNode root, TreeNode p) {
    12. if (root == null) return null;
    13. // root.val <= p.val 后继在右子树
    14. if (root.val <= p.val) return inorderSuccessor(root.right, p);
    15. //root.val > p.val 后继要么在左子树要么就是root本身
    16. TreeNode next = inorderSuccessor(root.left, p);
    17. return next == null ? root : next;
    18. }
    19. }