首页
学习
活动
专区
圈层
工具
发布

Leetcode Golang 105. Construct Binary Tree from Preorder and Inorder Traversal.go

版权声明:原创勿转 https://cloud.tencent.com/developer/article/1412883

思路

根据前序遍历和中序遍历的结果数组,重新构建二叉树

前序的第一个元素就是数的root节点,从中序中找到根节点,则左边的都是左子树,右边的都是右子树

然后递归

code

代码语言:javascript
复制
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 {
		return nil
	}
	res.Left = buildTree(preorder[1:idx+1], inorder[:idx])
	res.Right = buildTree(preorder[idx+1:], inorder[idx+1:])
	return res
}

下一篇
举报
领券