剑指offer-4-重建二叉树
重建二叉树
http://www.nowcoder.com/questionTerminal/8a19cbe657394eeaac2f6ea9b0f6fcf6
思路:
递归
二叉树有4种遍历方式:先根,中根,后根,层序。这个顺序值得是一个树分为根,左子树,右子树。
层序不能递归遍历。
先根和中根重建二叉树的思路,pre[0]为根节点,in中的元素通过pre[0]分为两部分,分别是左子树和右子树。
import java.util.*; public class Solution { public TreeNode reConstructBinaryTree(int [] pre,int [] in) { if(pre.length<=0){//pre和in相同长度 return null; } TreeNode head=new TreeNode(pre[0]); int index=0; while(index<in.length && in[index]!=pre[0]){ index++; } head.left=reConstructBinaryTree(Arrays.copyOfRange(pre,1,index+1), Arrays.copyOfRange(in,0,index)); //左子树 head.right=reConstructBinaryTree(Arrays.copyOfRange(pre,index+1,pre.length), Arrays.copyOfRange(in,index+1,in.length)); //右子树 return head; } }
剑指offer与数据结构 文章被收录于专栏
本专栏包括剑指offer题目和一些刷题用的数据结构,单调栈,树状数组,差分数组,后面还会更新红黑树等较为复杂的数据结构