题目
根据一棵树的前序遍历与中序遍历构造二叉树。
注意:
你可以假设树中没有重复的元素。
例如,给出
前序遍历 preorder = [3, 9, 20, 15, 7]
中序遍历 inorder = [9, 3, 15, 20, 7]
返回如下的二叉树:
3
/ \
9 20
/ \
15 7
方案一
/**
* 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 {
return nil
}
root := &TreeNode {Val: preorder[0]}
if len(preorder) == 1 {
return root
}
index := getIndex(inorder, preorder[0])
root.Left = buildTree(preorder[1:index+1], inorder[:index])
root.Right = buildTree(preorder[index+1:], inorder[index+1:])
return root
}
func getIndex(inorder []int, ele int) int {
for i, in := range inorder {
if in == ele {
return i
}
}
return -1
}
原文
https://leetcode-cn.com/explore/learn/card/data-structure-binary-tree/4/conclusion/16/