golang力扣leetcode 面试题04.06.后继者

简介: golang力扣leetcode 面试题04.06.后继者

面试题04.06.后继者

面试题04.06.后继者

题解

题目:给定一个二叉搜索树,和一个节点p,求节点p的后继节点(中序遍历的下一个节点)

思路:

利用性质
1.如果root>p,说明p在左子树,进入左子树,同时记录prev=root原来的位置
2.如果root=p,说明找到了,此时prev就是p的后继
中序遍历
1.按照左根右的顺序,递归把节点存下来
2.根据p.val二分即可

代码

func inorderSuccessor1(root *TreeNode, p *TreeNode) *TreeNode {
  var prev *TreeNode
  for root != nil {
    if root.Val > p.Val {
      prev = root
      root = root.Left
    } else {
      root = root.Right
    }
  }
  return prev
}
func inorderSuccessor2(root *TreeNode, p *TreeNode) *TreeNode {
  order := make([]*TreeNode, 0)
  var dfs func(root *TreeNode)
  dfs = func(root *TreeNode) {
    if root == nil {
      return
    }
    if root.Left != nil {
      dfs(root.Left)
    }
    order = append(order, root)
    if root.Right != nil {
      dfs(root.Right)
    }
  }
  dfs(root)
  n := sort.Search(len(order), func(i int) bool {
    return order[i].Val > p.Val
  })
  if n == len(order) {
    return nil
  }
  return order[n]
}
目录
相关文章
|
2月前
|
索引
力扣(LeetCode)数据结构练习题(3)------链表
力扣(LeetCode)数据结构练习题(3)------链表
95 0
|
2月前
力扣(LeetCode)数据结构练习题(2)
力扣(LeetCode)数据结构练习题(2)
31 0
|
2月前
|
存储
力扣(LeetCode)数据结构练习题
力扣(LeetCode)数据结构练习题
56 0
|
4月前
|
开发者 索引 Python
这些年背过的面试题——LeetCode
本文是技术人面试系列LeetCode篇,一文带你详细了解,欢迎收藏!
|
5月前
|
Python
155. 最小栈 力扣 python 空间换时间 o(1) 腾讯面试题
155. 最小栈 力扣 python 空间换时间 o(1) 腾讯面试题
|
5月前
|
存储 算法 索引
1124. 表现良好的最长时间段 (python) 前缀和 分类讨论 最大长度 力扣 面试题
1124. 表现良好的最长时间段 (python) 前缀和 分类讨论 最大长度 力扣 面试题
|
5月前
|
存储 算法
经典的滑动窗口的题目 力扣 2799. 统计完全子数组的数目(面试题)
经典的滑动窗口的题目 力扣 2799. 统计完全子数组的数目(面试题)
|
5月前
2670.找出不同元素数目差数组-力扣(LeetCode)
2670.找出不同元素数目差数组-力扣(LeetCode)
36 0
|
5月前
|
索引
821.字符的最短距离-力扣(LeetCode)
821.字符的最短距离-力扣(LeetCode)
40 0
|
6月前
|
SQL 算法 大数据
深入解析力扣181题:超过经理收入的员工(自连接方法详解及模拟面试问答)
深入解析力扣181题:超过经理收入的员工(自连接方法详解及模拟面试问答)
下一篇
DataWorks