您的位置:首页 > Web前端

剑指Offer——通过先序和中序构建二叉树

2017-06-21 23:08 225 查看
import java.io.*;
import java.util.*;
import java.util.logging.Level;
import java.util.logging.Logger;

public class Solution {
public TreeNode reConstructBinaryTree(int [] pre,int [] in) {
if(pre.length == 0) return null;
if(pre.length == 1) return new TreeNode(pre[0]);
int k = pre[0];
TreeNode treeNode = new TreeNode(k);
int pos = -1;
for(int i = 0; i < in.length; ++i){
if(in[i] == k) {
pos = i;
break;
}
}
//System.out.println(pos);
TreeNode left =
reConstructBinaryTree(Arrays.copyOfRange(pre, 1, 1 + pos),
Arrays.copyOfRange(in, 0, pos));

treeNode.left = left;

TreeNode right = reConstructBinaryTree(Arrays.copyOfRange(pre, pos+1, pre.length),
Arrays.copyOfRange(in, pos+1, in.length));

treeNode.right = right;
return treeNode;
}

public static void main(String[] args) {

int[] pre = new int[] {1,2,4,7,3,5,6,8};
int[] in = new int[] {4,7,2,1,5,3,8,6};
Solution solution = new Solution();
TreeNode treeNode = solution.reConstructBinaryTree(pre, in);

}
public static void print1(TreeNode treeNode) {

if(treeNode == null) return;
System.out.print(treeNode.val + " ");
print1(treeNode.left);
print1(treeNode.right);
}
public static void print2(TreeNode treeNode) {
if(treeNode == null)return;
print2(treeNode.left);
System.out.print(treeNode.val + " ");
print2(treeNode.right);
}
}
class TreeNode{
int val;
TreeNode left;
TreeNode right;
TreeNode(int x) { val = x; }
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  二叉树