golang力扣leetcode 105.从前序与中序遍历序列构造二叉树

简介: golang力扣leetcode 105.从前序与中序遍历序列构造二叉树

105.从前序与中序遍历序列构造二叉树

105.从前序与中序遍历序列构造二叉树

题解

思路

preorder 根 左 右
inorder  左 根 右
1.找到根的位置
2.递归构造左子树和右子树

代码

func buildTree(preorder []int, inorder []int) *TreeNode {
  if len(preorder) == 0 {
    return nil
  }
  root := &TreeNode{
    Val:   preorder[0],
    Left:  nil,
    Right: nil,
  }
  i := 0
  for ; i < len(inorder); i++ {
    if inorder[i] == preorder[0] {
      break
    }
  }
  // preorder 根 左 右
  // inorder  左 根 右
  // 中序根==i
  leftStart := 1
  leftEnd := i + 1
  rightStart := i + 1
  root.Left = buildTree(preorder[leftStart:leftEnd], inorder[:i])
  root.Right = buildTree(preorder[rightStart:], inorder[i+1:])
  return root
}
目录
相关文章
|
8月前
|
Go 索引 Perl
【LeetCode 热题100】【二叉树构造题精讲:前序 + 中序建树 & 有序数组构造 BST】(详细解析)(Go语言版)
本文详细解析了二叉树构造的两类经典问题:通过前序与中序遍历重建二叉树(LeetCode 105),以及将有序数组转化为平衡二叉搜索树(BST,LeetCode 108)。文章从核心思路、递归解法到实现细节逐一拆解,强调通过索引控制子树范围以优化性能,并对比两题的不同构造逻辑。最后总结通用构造套路,提供进阶思考方向,帮助彻底掌握二叉树构造类题目。
509 9
|
存储 SQL 算法
LeetCode力扣第114题:多种算法实现 将二叉树展开为链表
LeetCode力扣第114题:多种算法实现 将二叉树展开为链表
【LeetCode 37】106.从中序与后序遍历构造二叉树
【LeetCode 37】106.从中序与后序遍历构造二叉树
128 0
|
索引
力扣(LeetCode)数据结构练习题(3)------链表
力扣(LeetCode)数据结构练习题(3)------链表
278 0
力扣(LeetCode)数据结构练习题(2)
力扣(LeetCode)数据结构练习题(2)
103 0
|
存储
力扣(LeetCode)数据结构练习题
力扣(LeetCode)数据结构练习题
174 0
|
Python
【Leetcode刷题Python】105. 从前序与中序遍历序列构造二叉树
LeetCode上105号问题"从前序与中序遍历序列构造二叉树"的Python实现,通过递归方法根据前序和中序遍历序列重建二叉树。
185 3
2670.找出不同元素数目差数组-力扣(LeetCode)
2670.找出不同元素数目差数组-力扣(LeetCode)
144 0
|
索引
821.字符的最短距离-力扣(LeetCode)
821.字符的最短距离-力扣(LeetCode)
171 0
|
算法 数据可视化 数据挖掘
最佳加油站选择算法:解决环路加油问题的两种高效方法|LeetCode力扣134
最佳加油站选择算法:解决环路加油问题的两种高效方法|LeetCode力扣134

推荐镜像

更多