using System; using System.Collections.Generic; /* public class TreeNode { public int val; public TreeNode left; public TreeNode right; public TreeNode (int x) { val = x; } } */ class Solution { /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param preOrder int整型一维数组 * @param vinOrder int整型一维数组 * @return TreeNode类 */ List<int> preorder; IDictionary<int,int> inorderh = new Dictionary<int,int>(); public TreeNode reConstructBinaryTree (List<int> preOrder, List<int> vinOrder) { //preorder 计数 //inorder 寻找root并计算左右子树长度 this.preorder = preOrder; for (int i = 0; i < vinOrder.Count; i++) { inorderh.Add(vinOrder[i], i); } //if(preorder.Length == 1) return new TreeNode(preorder[0]); return DeduceTree2(0, 0, preorder.Count - 1); } public TreeNode DeduceTree2(int root, int left, int right) { if (left > right) return null; TreeNode node = new TreeNode(preorder[root]); int leftLength = inorderh[preorder[root]] - left; node.left = DeduceTree2(root + 1, left, left + leftLength - 1); node.right = DeduceTree2(root + leftLength + 1, left + leftLength + 1, right); return node; } }