/**
* Definition for a binary tree node.
* type TreeNode struct {
* Val int
* Left *TreeNode
* Right *TreeNode
* }
*/
func caller(inorder []int, postorder []int, indexMap map[int]int, inOrderStart,
inOrderEnd, postOrderStart, postOrderEnd int) *TreeNode {
if inOrderEnd < inOrderStart || postOrderEnd < postOrderStart {
return nil
}
//后续遍历的最后一个节点,就是根节点
rootValue := postorder[postOrderEnd]
//找到根节点在中序遍历中的位置
rootIndex := indexMap[rootValue]
node := &TreeNode{}
node.Val = rootValue
node.Left = caller(inorder, postorder, indexMap, inOrderStart, rootIndex - 1, postOrderStart,
postOrderStart + rootIndex - inOrderStart - 1)
node.Right = caller(inorder, postorder, indexMap, rootIndex + 1, inOrderEnd, postOrderStart + rootIndex - inOrderStart, postOrderEnd - 1)
return node
}
func buildTree(inorder []int, postorder []int) *TreeNode {
indexMap := make(map[int]int)
for index, value := range inorder {
indexMap[value] = index
}
return caller(inorder, postorder, indexMap, 0, len(inorder) - 1, 0, len(inorder) - 1)
}
从中序与后序遍历序列构造二叉树递归做法
最新推荐文章于 2022-11-19 15:50:07 发布