| 1234567891011121314151617181920212223242526272829303132333435363738394041 | package main/** * Definition for a binary tree node. * type TreeNode struct { *     Val int *     Left *TreeNode *     Right *TreeNode * } */func buildTreeByPreorderAndInorder(preorder []int, inorder []int) *TreeNode {	// func buildTree(preorder []int, inorder []int) *TreeNode {	nodeCnt := len(preorder)	if nodeCnt == 0 || nodeCnt != len(inorder) {		return nil	}	root := TreeNode{preorder[0], nil, nil}	if nodeCnt == 1 { // No children		return &root	}	var idx int	for idx = 0; idx < nodeCnt && inorder[idx] != root.Val; idx++ {		// Find the root index in inorder traversal	}	if idx != 0 { // If have left children		root.Left = buildTree(preorder[1:1+idx], inorder[:idx])	}	if idx != nodeCnt-1 { // If have right children		root.Right = buildTree(preorder[idx+1:], inorder[idx+1:])	}	return &root}// func main() {// 	printTree(buildTree(// 		[]int{1, 2, 4, 5, 3, 6, 7},// 		[]int{4, 2, 5, 1, 6, 3, 7}))// 	printTree(buildTree(// 		[]int{1, 2},// 		[]int{1, 2}))// }
 |