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

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

題目:給定一棵樹的前序遍歷preorder與中序遍歷inorder。請構造二叉樹並返回其根節點。

示例 1:

Input: preorder = [3,9,20,15,7], inorder = [9,3,15,20,7]
Output: [3,9,20,null,null,15,7]

示例 2:

Input: preorder = [-1], inorder = [-1]
Output: [-1]

思想:遞迴,建立一個空結點,值為先序的首個元素,在中序遍歷中找先序遍歷的首個元素,找到後,將兩個切片分割為兩個新的小切片
preorder[1:r+1], inorder[:r], preorder[r+1:], inorder[r+1:]
分別作為遞迴輸入呼叫,輸出空節點的左孩子和右孩子. 遞迴結束條件,如果輸入的先序或中序的陣列為空,則返回空.
func buildTree(preorder []int, inorder []int) *TreeNode {
	var r int = 0
	if len(preorder) == 0 {
		return nil
	}
	root := &TreeNode{}
	root.Val = preorder[0]
	for i := 0; i < len(inorder); i++ {
		if inorder[i] == preorder[0] {
			r = i
			break
		}
	}
	root.Left = buildTree(preorder[1:r+1], inorder[:r])
	root.Right = buildTree(preorder[r+1:], inorder[r+1:])
	return root
}

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