輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建出該二叉樹(java實現並測試)
阿新 • • 發佈:2018-11-14
假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。例如輸入前序遍歷序列{1,2,4,7,3,5,6,8}和中序遍歷序列{4,7,2,1,5,3,8,6},則重建二叉樹並返回。
package ssp; class TreeNode { int val; TreeNode left; TreeNode right; TreeNode(int x) { val = x; } } class Solution { public TreeNode reConstructBinaryTree(int [] pre,int [] in) { TreeNode root=create(pre,0,pre.length-1,in,0,in.length-1); return root; } private TreeNode create(int[] pre, int startPre, int endPre, int[] in, int startIn, int endIn) { // TODO Auto-generated method stub if(startPre>endPre||startIn>endIn) { return null; } TreeNode root=new TreeNode(pre[startPre]); for(int i=startIn;i<=endIn;i++) { if(pre[startPre]==in[i]) { root.left=create(pre,startPre+1,startPre+i-startIn,in,startIn,i-1); root.right=create(pre,startPre+i-startIn+1,endPre,in,i+1,endIn); break; } } return root; } public void preOrder(TreeNode node){ if(node != null){ System.out.print(node.val+" "); preOrder(node.left); preOrder(node.right); } } } public class BinaryTree { public static void main(String [] args) { int [] pre={1,2,4,7,3,5,6,8}; int [] in={4,7,2,1,5,3,8,6}; Solution tool=new Solution(); TreeNode T=tool.reConstructBinaryTree(pre, in); tool.preOrder(T); } }