LeetCode 五月打卡-day16

Posted 王六六的IT日常

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode 五月打卡-day16相关的知识,希望对你有一定的参考价值。

面试题 04.06. 后继者

参考题解:
【宫水三叶】BST 特性运用题

二叉搜索树:中序遍历的结果为递增
利用 BST 的特性,可以根据当前节点 root 与 p 的值大小关系来确定搜索方向:

  • 若有 root.val <= p.val : 根据 BST 特性可知当前节点 root 及其左子树子节点均满足「值小于等于 p.val」,因此不可能是 p 点的后继,我们直接到 root 的右子树搜索 p 的后继(递归处理);
  • 若有 root.val > p.val : 当第一次搜索到满足此条件的节点时,在以 root 为根节点的子树中「位于最左下方」的值为 p 的后继,但也有可能 root 没有左子树,因此 p 的后继要么在 root 的左子树中(若有),要么是 root 本身,此时我们可以直接到 root 的左子树搜索,若搜索结果为空返回 root,否则返回搜索结果。
/**
 * 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 null;
        
        //二叉搜索树的中序遍历序列:左根右 递增
        if (root.val <= p.val) //当前节点 root 及其左子树子节点均满足「值小于等于 p.val」,因此不可能是 p 节点的后继,直接在 root 的右子树中搜索 p 的后继(递归)
            return inorderSuccessor(root.right, p);
        
        //p 的后继要么在 root 的左子树中(若有),要么是 root 本身
        //直接搜索root 的左子树,若搜索结果为空返回 root,否则返回搜索结果。
        TreeNode ans = inorderSuccessor(root.left, p);
        return ans == null ? root : ans;
       
    

以上是关于LeetCode 五月打卡-day16的主要内容,如果未能解决你的问题,请参考以下文章

LeetCode 五月打卡-day01

LeetCode 五月打卡-day19

LeetCode 五月打卡-day07

LeetCode 五月打卡-day20

LeetCode 五月打卡-day08

LeetCode 五月打卡-day13