面试题 04.06. 后继者

题目表述

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

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

示例 1:

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

2
/
1 3

输出: 2

解题思路

只有两种情况

  1. p没有右子树
  2. p有右子树

如果有右子树的话,那么只需要直接根据中序遍历的规则,找到p的右子树的最左孩子即可

否则就递归向下找即可,用pre记录后继节点。

/** * 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(p.right != null){ p = p.right; while(p.left != null){ p = p.left; } return p; } TreeNode pre = null, cur = root; while(cur != p){ if(p.val < cur.val){ pre = cur; cur = cur.left; }else{ cur = cur.right; } } return pre; } }

__EOF__

本文作者Younger
本文链接https://www.cnblogs.com/youngerwb/p/16246965.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   YoungerWb  阅读(24)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
点击右上角即可分享
微信分享提示