基础题:根据二叉树的中缀和后缀求前缀
思路,递归分治即可
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56
|
/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */ class Solution { public TreeNode buildTree(int[] inorder, int[] postorder) { int len = postorder.length; if (len==0){ return null; } int x = postorder[len-1]; TreeNode root = new TreeNode(x); if (len==1){ return root; } int index = -1; for(int i=0;i<len;i++){ if (inorder[i]==x){ index = i; break; } } if (index>0){ int[] leftInorder = new int[index]; int[] leftPostorder = new int[index]; for(int i=0;i<index;i++){ leftInorder[i] = inorder[i]; } for(int i=0;i<index;i++){ leftPostorder[i] = postorder[i]; } TreeNode left = buildTree(leftInorder,leftPostorder); root.left = left; } if (len-1-index>0){ int[] leftInorder = new int[len-1-index]; int[] leftPostorder = new int[len-1-index]; for(int i=0;i<len-1-index;i++){ leftInorder[i] = inorder[i+index+1]; } for(int i=0;i<len-1-index;i++){ leftPostorder[i] = postorder[i+index]; } TreeNode right = buildTree(leftInorder,leftPostorder); root.right = right; } return root; } }
|
递归的消耗还是大,内存是时间复杂度都比较高,特别是数组复制,但是这样清晰
1.一种优化是,不复制数组,将下标传入即可
2.移除递归,改为while循环
近期评论