题解 | #重建二叉树#
重建二叉树
https://www.nowcoder.com/practice/8a19cbe657394eeaac2f6ea9b0f6fcf6
方法一:递归
递归思想:
- 已知前序遍历,可以找到二叉树根结点
- 已知根结点和中序遍历,可以找到左右子树
- 子树根据前序、中序遍历又找到根结点和左右子树
- Arrays.copyOfRange(T[] original, int from, int to) 方法
复制指定的数组到一个新的数组。 - 参数说明:
其中T[] original是要复制的数组,from是复制开始位置的元素的序号(包括这个元素),to复制结束位置的序号(不包括这个元素)【使用时可能参数错误导致的异常】
public TreeNode reConstructBinaryTree(int [] pre,int [] vin) { if(pre.length==0)return null; TreeNode root = new TreeNode(pre[0]); int i = 0; while(vin[i]!=root.val){ i++; } //递归传参排除根结点 //用同样的找根结点的办法,递归处理root的左右子树 root.left=reConstructBinaryTree(Arrays.copyOfRange(pre,1,i+1), Arrays.copyOfRange(vin,0,i)); root.right=reConstructBinaryTree(Arrays.copyOfRange(pre,i+1,pre.length), Arrays.copyOfRange(vin,i+1,vin.length)); re