package binRela;
import java.util.Arrays;
/**
* @Author GJL
* @Desription
* @Date 2017/11/23
* @Modified By:
**/
public class FindAcurateTree {
public static BinaryNode rebuildBinaryTree(int[] preOrder,int[] inOrder){
//出口(终止条件)
if(preOrder==null||preOrder.length==0||inOrder==null||inOrder.length==0){
return null;
}
//根据先跟遍历找到跟节点 初始化树
BinaryTree tree = new BinaryTree(preOrder[0]);
//在中序遍历找到跟节点的位置i
int i = 0;
for (; i < inOrder.length; i++) {
if(preOrder[0]==inOrder[i]){
break;
}
}
//根据i重新定义左子树lPreOrder lInorder 右子树rPreOrder rInorder
int[] lPreOrder = Arrays.copyOfRange(preOrder,1,i+1);
int[] lInOrder = Arrays.copyOfRange(inOrder,0,i);
int[] rPreOrder = Arrays.copyOfRange(preOrder,i+1,preOrder.length);
int[] rInOrder = Arrays.copyOfRange(inOrder,i+1,inOrder.length);
tree.root.lNode = rebuildBinaryTree(lPreOrder,lInOrder);
tree.root.rNode = rebuildBinaryTree(rPreOrder,rInOrder);
return tree.root;
}
public static void main(String[] args) {
/* BinaryTree tree = new BinaryTree(4);
tree.addNode(5);
tree.addNode(1);
tree.addNode(3);*/
int[] preOrder ={4,1,3,5};
int[] inOrder = {1,3,4,5};
BinaryNode binaryNode = rebuildBinaryTree(preOrder,inOrder);
BinaryTree.showAllNodes(binaryNode);
}
/* public static void main(String[] args) {
}*/
}
class BinaryTree{
BinaryNode root;
public BinaryTree(int data) {
this.root = new BinaryNode(data);
}
public void addNode(int data){
//构造新加节点
BinaryNode node = new BinaryNode(data);
//若未初始化 则新加节点为根节点
if(root == null){ root = node;return;}
//获取树 的跟节点
BinaryNode p = root;
while(true){
if(p.data>data){
if(p.lNode == null){
p.lNode = node;
return;
}else{
p = p.lNode;
}
}else{
if(p.rNode == null){
p.rNode = node;
return;
}else{
p = p.rNode;
}
}
}
}
public static void showAllNodes(BinaryNode root){
if(root==null){
return;
}
//递归调用 完成遍历
System.out.println(root.data);
showAllNodes(root.lNode);
showAllNodes(root.rNode);
}
}
class BinaryNode{
int data;
BinaryNode lNode;
BinaryNode rNode;
public BinaryNode(int data) {
this.data = data;
}
}
二叉树的构建 遍历 以及 根据 先序遍历 中序遍历 来构建二叉树
最新推荐文章于 2022-12-15 16:42:57 发布