NOTE
从前序与中序遍历序列构造二叉树
从前序与中序遍历序列构造二叉树的 LeetCode 解题笔记。
这是历史学习笔记,可能存在过时或不完整的理解。
1. 题目描述
根据一棵树的前序遍历与中序遍历构造二叉树。
2. 思路
- 思路一
- 前序遍历第一个元素是 root
- 根据这个 root 在中序遍历中的位置把中序分两半,左半对应左子树,右半对应右子树
- 注意这里不是二叉搜索树,因此中序遍历不是有序的
3. 实现
/**
* Definition for a binary tree node.
* type TreeNode struct {
* Val int
* Left *TreeNode
* Right *TreeNode
* }
*/
func buildTree(preorder []int, inorder []int) *TreeNode {
if len(preorder) == 0 || len(inorder) == 0 { return nil }
rootVal := preorder[0]
idx := find(inorder, rootVal)
root := &TreeNode{Val: rootVal}
root.Left = buildTree(preorder[1:idx+1], inorder[:idx])
root.Right = buildTree(preorder[idx+1:], inorder[idx+1:])
return root
}
func find(nums []int, target int) int {
for i, num := range nums {
if num == target { return i }
}
return -1
}
讨论
使用 GitHub 账号参与讨论,评论会保存在 GitHub Issues 中。在 GitHub 查看