参考Macho0723的博客,网址:https://blog.csdn.net/qq_34154570/article/details/82700094
已知前序、中序,求二叉树和后序遍历结果
输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。(剑指offer原题)
1 1 1 1 1
472 5386 2 5386 2 5386 2 3 2 3
47 4 4 5 86 4 5 6
7 7 7 8
具体代码为:
方法:
Arrays.copyOfRange(T[ ] original,int from,int to) //将一个原始的数组original,从下标from开始复制,复制到上标to,生成一个新的数组。即复制范围为:[from,to)
package algorithm;
import java.util.Arrays;
/*
参考Macho0723的博客,网址:https://blog.csdn.net/qq_34154570/article/details/82700094
已知前序、中序,求二叉树和后序遍历结果
输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。
例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。(剑指offer原题)
1 1 1 1 1
472 5386 2 5386 2 5386 2 3 2 3
47 4 4 5 86 4 5 6
7 7 7 8
具体代码为:
* */
public class Tree {
class TreeNode{
int value;
TreeNode left;
TreeNode right;
TreeNode(int value1){
this.value=value1;
}
}
public static TreeNode createTree(int[] pre,int[] mid){
if(pre==null||mid==null||pre.length==0||mid.length==0){
return null;
}
TreeNode node=new Tree().new TreeNode(pre[0]);
for(int i=0;i
// node.left=
//其中方法Arrays.copyOfRange(T[ ] original,int from,int to)
//原始数组original,从from(包括)开始复制,复制到上标to(不包括),生成一个新的数组。即复制范围为:[from,to)
node.left = createTree(Arrays.copyOfRange(pre, 1, i + 1), Arrays.copyOfRange(mid, 0, i));
node.right = createTree(Arrays.copyOfRange(pre, i + 1, pre.length), Arrays.copyOfRange(mid, i + 1, mid.length));
}
}
return node;
}
//二叉树的遍历--前序遍历 先根-左->右
public static void preTravel(TreeNode node){
if(node==null){
return;
}
printNode(node);
preTravel(node.left);
preTravel(node.right);
}
//二叉树的遍历--中序遍历 先左->根->右
public static void midTravel(TreeNode node){
if(node==null){
return;
}
midTravel(node.left);
printNode(node);
midTravel(node.right);
}
//二叉树的遍历--后序遍历 先左->右->根
public static void lastTravel(TreeNode node){
if(node==null){
return;
}
lastTravel(node.left);
lastTravel(node.right);
printNode(node);
}
private static void printNode(TreeNode node) {
// TODO Auto-generated method stub
System.out.print(" "+node.value);
}
public static void main(String[] args) {
// TODO Auto-generated method stub
int[] pre={1,2,4,7,3,5,6,8};
int[] mid={4,7,2,1,5,3,8,6};
TreeNode node=createTree(pre,mid);
System.out.println("前序遍历:");
preTravel(node);
System.out.println("\n中序遍历:");
midTravel(node);
System.out.println("\n后序遍历:");
lastTravel(node);
}
}
前序遍历:
1 2 4 7 3 5 6 8
中序遍历:
4 7 2 1 5 3 8 6
后序遍历:
7 4 2 5 8 6 3 1