您的位置:首页 > 编程语言 > Java开发

一直二叉树的前序遍历和中序遍历的结果,重建该二叉树 Java代码实现

2015-10-05 14:33 806 查看
package AlgorithmTest;

/**
* Created by dell on 2015/10/5.
*/
public class RecreateBinaryTreeTest {
public static void main(String[] args) {
int[] preTraverseArr = new int[]{1, 2, 4, 7, 3, 5, 6, 8};
int[] midTreverseArr = new int[]{4, 7, 2, 1, 5, 3, 8, 6};
BinaryTree tree = BinaryTree.RecreateBinaryTree(preTraverseArr, midTreverseArr);
System.out.println("preOrder:");
tree.preOrderPrint();
System.out.println("midOrder:");
tree.midOrderPrint();
}
}

class BinaryTree {
private static class Node {
private int value;
private Node left;
private Node right;
public Node(int value){
this.value = value;
left = null;
right = null;
}
}

private Node root;

public Node getRoot() {
return root;
}

public void setRoot(Node root) {
this.root = root;
}

public void preOrderPrint() {
preOrderPrint(root);
}

public void midOrderPrint() {
midOrderPrint(root);
}
private void preOrderPrint(Node root) {
if (root != null) {
System.out.println(root.value);
preOrderPrint(root.left);
preOrderPrint(root.right);
}
}

private void midOrderPrint(Node root) {
if (root != null) {
midOrderPrint(root.left);
System.out.println(root.value);
midOrderPrint(root.right);
}
}

public static BinaryTree RecreateBinaryTree(int[] preTraverseArr, int[] midTreverseArr) {
Node root = RecreateBinaryTree(preTraverseArr, 0, midTreverseArr, 0, preTraverseArr.length);
BinaryTree tree = new BinaryTree();
tree.setRoot(root);
return tree;
}

private static Node RecreateBinaryTree(int[] preTraverseArr, int be1,int[] midTreverseArr, int be2, int length) {
if (0 != length){
Node root = new Node(preTraverseArr[be1]);

int index = findNum(midTreverseArr, be2, length, preTraverseArr[be1]);
int leftLength = index - be2;
int rightLenght = be2 + length - 1 - index;
Node nodeleft = RecreateBinaryTree(preTraverseArr, be1 + 1, midTreverseArr, be2, leftLength);
Node noderight = RecreateBinaryTree(preTraverseArr, be1 + leftLength + 1, midTreverseArr, index + 1, rightLenght);

root.left = nodeleft;
root.right= noderight;

return root;
}
return null;
}

private static int findNum(int[] array, int be, int length, final int findNum){
for (int i = be; i < be + length; ++i){
if (findNum == array[i]){
return i;
}
}

return -1;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: