| 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}))
 
- // }
 
 
  |