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的主要内容,如果未能解决你的问题,请参考以下文章