[LeetCode] 根據前序序列和中序序列重建二叉樹
阿新 • • 發佈:2019-02-09
思路:
1、根據先序向量陣列的值把中序向量陣列一分為二,然後遞迴左右部分;
2、設定全域性 index 索引,作為先序遍歷向量的下標,每次遞迴左子樹之後減一。
/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */ public class Solution { private int index = -1 ; public TreeNode buildTree(int[] preorder, int[] inorder) { return btConstruct(preorder, inorder, 0, preorder.length - 1) ; } public TreeNode btConstruct(int[] preorder, int[] inorder, int l, int r) { index ++ ; if(l > r || r > preorder.length) { return null ; } TreeNode root = new TreeNode(preorder[index]) ; int j ; for(j = l; j <= r; j ++) { if(preorder[index] == inorder[j]) { break ; } } if(j <= r) { root.left = btConstruct(preorder, inorder, l, j - 1) ; index -- ; root.right = btConstruct(preorder, inorder, j + 1, r) ; } return root ; } }