大家好呀,今天这道题考查的:二叉树遍历,我将和大家分享下前序+中序序如何推出后序,以及后序+中序推出前序
一、二叉树的遍历
- 前序遍历:根节点——左子树——右子树
- 中序遍历:左子树——根节点——右子树
- 后序遍历:左子树——右子树——根节点
- 层序遍历:从上到下从左到右,逐层遍历(借助队列实现)
二、例题
1.美国血统(前序+中序—>后序)
简单就是由二叉树的中序和前序遍历,求得该二叉树的后序遍历
- AC代码
import java.util.Scanner;
/*
* 中序遍历+前序遍历-->后序遍历
*/
public class Main{
static String ldr,dlr;
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
ldr=sc.nextLine();//存放中序遍历
dlr=sc.nextLine();//存放前序遍历
int n=ldr.length();
dfs(0,n-1,0,n-1);//前+中
}
private static void dfs(int a,int b,int a1,int b1) {
if(a>b||a1>b1) {
return;
}
char data=dlr.charAt(a);//根节点
int index=ldr.indexOf(data);
dfs(a+1,a+index-a1,a1,index-1);//递归遍历左子树
dfs(index+a+1-a1,b,index+1,b1);//递归遍历右子树
System.out.print(data);
}
}
2.后序+中序–>前序
动手画下二叉树
- AC代码
public class Main{
static String ldr,lrd;
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
ldr=sc.nextLine();//存放中序遍历的结果
lrd=sc.nextLine();//存放后序遍历的结果
int n=ldr.length();
dfs(n-1,0,n-1);
}
private static void dfs(int a,int x,int y) {
if(x>y) {
return;
}
char data=lrd.charAt(a);
int index=ldr.indexOf(data);
System.out.print(data);//输出根节点
dfs(a+index-1-y,x,index-1);//递归左子树
dfs(a-1,index+1,y);//递归右子树
}
}
总结
- 做题心得
做这道题的时侯,我先是在纸上模拟了如何通过前序+中序把二叉树还原,进而在得到后序遍历结果。就想到了可以用递归去解决,最重要的是递归中参数的变化,大家一定一定要动手去模拟,不要只停留再看。
- 小小愿望
我是爬行系,有什么错误还希望指出哦,一起学习进步,可以点下关注哦,坚持每天一题!