1. 程式人生 > 其它 >[Leetcode]25.從中序與後序遍歷序列構造二叉樹

[Leetcode]25.從中序與後序遍歷序列構造二叉樹

題目:根據一棵樹的中序遍歷與後序遍歷構造二叉樹。

注意:
你可以假設樹中沒有重複的元素。

例如,給出

中序遍歷 inorder =[9,3,15,20,7]
後序遍歷 postorder = [9,15,7,20,3]

返回如下的二叉樹:

    3
   / \
  9  20
    /  \
   15   7

思想:同上題,遞迴,只需要更改構造的取值範圍即可,注意要取後序遍歷的末元素作為每次的根,記得加上結束遞迴的條件.
inorder[:r], postorder[:r], inorder[r+1:], postorder[r:n]


func buildTree(inorder []int, postorder []int) *TreeNode {
	if len(inorder) == 0 {
		return nil
	}
	var r int = 0
	root := &TreeNode{}
	n := len(postorder) - 1
	root.Val = postorder[n]
	for i := 0; i < len(inorder); i++ {
		if inorder[i] == postorder[n] {
			r = i
			break
		}
	}
	root.Left = buildTree(inorder[:r], postorder[:r])
	root.Right = buildTree(inorder[r+1:], postorder[r:n])
	return root
}

題目來源:https://leetcode-cn.com/problems/construct-binary-tree-from-inorder-and-postorder-traversal/