给出一棵树的中序遍历和后序遍历,请构造这颗二叉树
注意:
保证给出的树中不存在重复的节点
思路:可以根据后序遍历获取跟节点,然后根据根节点把中序遍历分割为左右两部分,然后根据中序遍历的左右两部分,来分割后序的左右两部分,然后递归处理即可。
package main
import . "nc_tools"
/*
* type TreeNode struct {
* Val int
* Left *TreeNode
* Right *TreeNode
* }
*/
/**
*
* @param inorder int整型一维数组
* @param postorder int整型一维数组
* @return TreeNode类
*/
func buildTree( inorder []int , postorder []int ) *TreeNode {
// write code here
num := len(postorder)
if num == 0 {
return nil
}
val := postorder[num-1]
var k, v int
for k, v = range inorder {
if val == v {
break
}
}
node := new(TreeNode)
node.Val = val
inorder1 := inorder[:k]
inorder2 := inorder[k+1:]
postorder1 := postorder[:k]
postorder2 := postorder[k : len(postorder)-1]
node.Left = buildTree(inorder1, postorder1)
node.Right = buildTree(inorder2, postorder2)
return node
}