1、题目
2、题解
解题的关键就在于同一棵树,不管是先序还是中序遍历它的长度都是相等的,所以可以通过以下思路实现递归。
1)通过先序遍历知道根节点;
2)在中序遍历中查找根节点,通过根节点的位置得到左右子树对应的先序和中序遍历范围;
对上述过程进行递归,逐渐得到各个子树,实现代码如下:
/**
* 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{
root := &TreeNode{preorder[0], nil, nil} // 初始化树的根节点
rootV:=preorder[0]
for k, v := range inorder {
if v==rootV{
l:=k+1
// fmt.Println(preorder, inorder)
root.Left = buildTree(preorder[1:l], inorder[:l-1])
root.Right = buildTree(preorder[l:], inorder[l:])
}
}
return root
}else{
return nil
}
}
提交结果如下