LeetCode每日一题(24)——后继者

简介: 后继者1.题目2.示例3.思路4.代码

1.题目


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


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


2.示例


示例 1:


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


    2 
   / \ 
  1   3


输出: 2


示例 2:


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


      5
   / \
  3   6    
   / \  
  2   4 
 /    
1


输出: null


3.思路


要找到二叉树的下一个节点,所以要把走过的节点存下来,才知道节点和节点之间的先后关系。因为某一结点的下一个节点很可能并不和当前节点相邻,只要明白二叉树的组成原理应该不用多说。根据二叉搜索树的组成原理可以通过存下路径找出结果。


4.代码


为了思路清晰方便理解,我把遍历过程分成了两个部分


func inorderSuccessor(root, p *TreeNode) *TreeNode {
  //存放路径的节点切片
  st := []*TreeNode{}
  //上一个节点和当前节点
  var pre, cur *TreeNode = nil, root
  //只要当前路径切片不为空或者当前节点不为nil
  for len(st) > 0 || cur != nil {
    //第一部分
    //只要当前节点不为空就一直向左子树遍历,直到到了最后的叶子节点
    for cur != nil {
      st = append(st, cur)
      cur = cur.Left
    }
    //此时当前节点为nil,通过从路径中取最后一个节点作为当前节点
    cur = st[len(st)-1]
    st = st[:len(st)-1]
    //如果上一个节点是目标节点,则当前节点就是要找的节点
    if pre == p {
      return cur
    }
    //至此从上一个节点到最后的左子树节点遍历结束
    //第二部分
    //如果没有找到目标节点,则遍历当前节点的右子树
    pre = cur
    cur = cur.Right
  }
  return nil
}
相关文章
|
5月前
|
Go
golang力扣leetcode 面试题04.06.后继者
golang力扣leetcode 面试题04.06.后继者
44 0
|
算法
LeetCode——面试题 04.06. 后继者
LeetCode——面试题 04.06. 后继者
48 0
LeetCode——面试题 04.06. 后继者
|
算法
LeetCode每日一题——面试题 04.06. 后继者
设计一个算法,找出二叉搜索树中指定节点的“下一个”节点(也即中序后继)。
72 0
|
算法
​LeetCode刷题实战285:二叉搜索树中的顺序后继
算法的重要性,我就不多说了吧,想去大厂,就必须要经过基础知识和业务逻辑面试+算法面试。所以,为了提高大家的算法能力,这个公众号后续每天带大家做一道算法题,题目就从LeetCode上面选 !
118 0
|
28天前
|
Unix Shell Linux
LeetCode刷题 Shell编程四则 | 194. 转置文件 192. 统计词频 193. 有效电话号码 195. 第十行
本文提供了几个Linux shell脚本编程问题的解决方案,包括转置文件内容、统计词频、验证有效电话号码和提取文件的第十行,每个问题都给出了至少一种实现方法。
LeetCode刷题 Shell编程四则 | 194. 转置文件 192. 统计词频 193. 有效电话号码 195. 第十行
|
2月前
|
Python
【Leetcode刷题Python】剑指 Offer 32 - III. 从上到下打印二叉树 III
本文介绍了两种Python实现方法,用于按照之字形顺序打印二叉树的层次遍历结果,实现了在奇数层正序、偶数层反序打印节点的功能。
50 6
|
2月前
|
搜索推荐 索引 Python
【Leetcode刷题Python】牛客. 数组中未出现的最小正整数
本文介绍了牛客网题目"数组中未出现的最小正整数"的解法,提供了一种满足O(n)时间复杂度和O(1)空间复杂度要求的原地排序算法,并给出了Python实现代码。
99 2
|
28天前
|
数据采集 负载均衡 安全
LeetCode刷题 多线程编程九则 | 1188. 设计有限阻塞队列 1242. 多线程网页爬虫 1279. 红绿灯路口
本文提供了多个多线程编程问题的解决方案,包括设计有限阻塞队列、多线程网页爬虫、红绿灯路口等,每个问题都给出了至少一种实现方法,涵盖了互斥锁、条件变量、信号量等线程同步机制的使用。
LeetCode刷题 多线程编程九则 | 1188. 设计有限阻塞队列 1242. 多线程网页爬虫 1279. 红绿灯路口
|
2月前
|
索引 Python
【Leetcode刷题Python】从列表list中创建一颗二叉树
本文介绍了如何使用Python递归函数从列表中创建二叉树,其中每个节点的左右子节点索引分别是当前节点索引的2倍加1和2倍加2。
47 7