劍指offer根據前中序遍歷重建二叉樹
阿新 • • 發佈:2020-08-24
- 前中後序的遍歷是指對一個二叉樹而言,最終的遍歷結果的根節點是在哪裡的順序,即
* 前序遍歷:根節點、左子樹、右子樹
* 中序遍歷:左子樹、根節點、右子樹
* 後序遍歷:左子樹、右子樹、根節點 - 重建的思路:根據根節點位置找到根節點,例如前序的首位或者後續的末尾,然後在中序遍歷中找到根節點的位置,藉此劃分出左右子樹的子陣列,然後進行遞迴重建
public TreeNode buildTree(int[] preorder, int[] inorder) { if(preorder.length==0)return null; if(preorder.length==1&&inorder.length==1){ return new TreeNode(preorder[0]); } TreeNode root = new TreeNode(preorder[0]); int i; for(i = 0 ;i<inorder.length;i++){ if(inorder[i]==preorder[0])break; } root.left = buildTree(Arrays.copyOfRange(preorder,1,1+i),Arrays.copyOfRange(inorder,0,i)); root.right = buildTree(Arrays.copyOfRange(preorder,i+1,preorder.length),Arrays.copyOfRange(inorder,i+1,inorder.length)); return root; }