根据一棵树的前序遍历与中序遍历构造二叉树node
注意:git
你能够假设树中没有重复的元素。github
例如,给出golang
前序遍历 preorder = [3,9,20,15,7] 中序遍历 inorder = [9,3,15,20,7]
返回以下的二叉树:面试
3 / \ 9 20 / \ 15 7
// 根据一棵树的前序遍历与中序遍历构造二叉树 // TreeNode 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 } //前序遍历的第一个节点即根节点 res := &TreeNode{ Val: preorder[0], } if len(preorder) == 1 { return res } // 在中序遍历中,根节点前面的即根节点的左子树,后面的即右子树 //匿名函数 idx := func(val int, nums []int) int { for i, v := range nums { if v == val { return i } } return -1 }(res.Val, inorder) if idx == -1 { panic("data error") } //递归,构建根节点左子树和右子树 res.Left = buildTree(preorder[1:idx+1], inorder[:idx]) res.Right = buildTree(preorder[idx+1:], inorder[idx+1:]) return res }
本文为原创文章,转载注明出处,欢迎扫码关注公众号
楼兰
或者网站
https://lovecoding.club,第一时间看后续精彩文章,以为好的话,顺手分享到朋友圈吧,感谢支持。