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
}
相关文章
|
3月前
|
Go
golang力扣leetcode 面试题04.06.后继者
golang力扣leetcode 面试题04.06.后继者
40 0
|
算法
LeetCode——面试题 04.06. 后继者
LeetCode——面试题 04.06. 后继者
41 0
LeetCode——面试题 04.06. 后继者
|
算法
LeetCode每日一题——面试题 04.06. 后继者
设计一个算法,找出二叉搜索树中指定节点的“下一个”节点(也即中序后继)。
67 0
|
算法
​LeetCode刷题实战285:二叉搜索树中的顺序后继
算法的重要性,我就不多说了吧,想去大厂,就必须要经过基础知识和业务逻辑面试+算法面试。所以,为了提高大家的算法能力,这个公众号后续每天带大家做一道算法题,题目就从LeetCode上面选 !
108 0
|
12天前
|
Python
【Leetcode刷题Python】剑指 Offer 32 - III. 从上到下打印二叉树 III
本文介绍了两种Python实现方法,用于按照之字形顺序打印二叉树的层次遍历结果,实现了在奇数层正序、偶数层反序打印节点的功能。
26 6
|
12天前
|
Python
【Leetcode刷题Python】剑指 Offer 26. 树的子结构
这篇文章提供了解决LeetCode上"剑指Offer 26. 树的子结构"问题的Python代码实现和解析,判断一棵树B是否是另一棵树A的子结构。
26 4
|
12天前
|
搜索推荐 索引 Python
【Leetcode刷题Python】牛客. 数组中未出现的最小正整数
本文介绍了牛客网题目"数组中未出现的最小正整数"的解法,提供了一种满足O(n)时间复杂度和O(1)空间复杂度要求的原地排序算法,并给出了Python实现代码。
39 2
|
12天前
|
索引 Python
【Leetcode刷题Python】从列表list中创建一颗二叉树
本文介绍了如何使用Python递归函数从列表中创建二叉树,其中每个节点的左右子节点索引分别是当前节点索引的2倍加1和2倍加2。
15 7
|
12天前
|
Python
【Leetcode刷题Python】剑指 Offer 30. 包含min函数的栈
本文提供了实现一个包含min函数的栈的Python代码,确保min、push和pop操作的时间复杂度为O(1)。
12 4