/**
* Definition for a binary tree node.
* type TreeNode struct {
* Val int
* Left *TreeNode
* Right *TreeNode
* }
*/
func caller(preorder []int, inorder []int, indexMap map[int]int,inOrderStart, inOrderEnd, preOrderStart, preOrderEnd int) *TreeNode {
if inOrderEnd < inOrderStart || preOrderEnd < preOrderStart {
return nil
}
//后续遍历的最后一个节点,就是根节点
rootValue := preorder[preOrderStart]
//找到根节点在中序遍历中的位置
rootIndex := indexMap[rootValue]
node := &TreeNode{}
node.Val = rootValue
node.Left = caller(preorder, inorder, indexMap, inOrderStart, rootIndex - 1, preOrderStart + 1,
preOrderStart + rootIndex - inOrderStart)
node.Right = caller(preorder, inorder, indexMap, rootIndex + 1, inOrderEnd, preOrderStart + rootIndex - inOrderStart + 1, preOrderEnd)
return node
}
func buildTree(preorder []int, inorder []int) *TreeNode {
indexMap := make(map[int]int)
for index, value := range inorder {
indexMap[value] = index
}
return caller(preorder, inorder, indexMap, 0, len(inorder) - 1, 0, len(inorder) - 1)
}
从前序和中序遍历构建二叉树
最新推荐文章于 2024-02-20 09:21:03 发布