华为OJ 二叉树遍历
来源:互联网 发布:公需课挂机软件2017 编辑:程序博客网 时间:2024/06/06 04:06
/*二叉树的前序、中序、后序遍历的定义:前序遍历:对任一子树,先访问跟,然后遍历其左子树,最后遍历其右子树;中序遍历:对任一子树,先遍历其左子树,然后访问根,最后遍历其右子树;后序遍历:对任一子树,先遍历其左子树,然后遍历其右子树,最后访问根。给定一棵二叉树的前序遍历和中序遍历,求其后序遍历(提示:给定前序遍历与中序遍历能够唯一确定后序遍历)。*/
对于知中序后序遍历,求前序的,跟这个一样,只是在递归的时候是通过循环查找中序中与后序的倒数第一个相同的值得位置,然后递归左子树,右子树。
import java.util.*;public class Main{ //数组模拟静态栈,由先序,中序,判断出后序,也就是先找出先序的第一个,肯定是根节点,然后在中序中以此为分割,前边的是左树,后边的是右树, //然后先递归右树,再递归左树static char[] stack=new char[1000];static int t=0; public static void main(String[] args) { Scanner sc=new Scanner(System.in);while(sc.hasNext()){t=0;String s1=sc.nextLine();String s2=sc.nextLine();if(s1.length()>26||s2.length()>26)break;//递归函数post(s1,s2);<span style="white-space:pre"></span>//输出for(int i=t-1;i>=0;i--){System.out.print(stack[i]);}System.out.println();} } //s1先序,s2中序 public static void post(String s1,String s2){ if(s1.length()==0) return ; int i;//找到中序中与先序第一个对应的值得位置,然后分开左右子树。递归 for(i=0;i<s2.length();i++){ if(s2.charAt(i)==s1.charAt(0)) break; }//入栈 stack[t]=s1.charAt(0); t++;//递归右子树 post(s1.substring(i+1),s2.substring(i+1));//递归左子树 post(s1.substring(1,i+1),s2.substring(0,i)); }}
0 0
- 华为OJ 二叉树遍历
- 华为OJ 重建二叉树
- 【华为练习题】二叉树遍历
- 九度OJ 1078 二叉树遍历
- 九度OJ 1078 二叉树遍历
- 九度OJ-1078 二叉树遍历
- 九度oj 1184 二叉树遍历
- 南邮 OJ 1018 深度遍历二叉树
- 南邮 OJ 1020 层次遍历二叉树
- 苏州OJ c005: 二叉树遍历
- 九度oj-1078-二叉树遍历
- 九度OJ - 1078 - 二叉树遍历
- 九度OJ - 1184 - 二叉树遍历
- 九度OJ-1078-二叉树遍历
- 九度OJ 1078:二叉树遍历 (二叉树)
- 九度OJ 1184:二叉树遍历 (二叉树)
- 华为oj 求二叉树的深度和宽度
- [华为机试练习题]10.二叉树遍历
- 深刻的理解Fragment生命周期 都在做什么
- android 自定义环形进度条,渐变色
- android asmack 注册 登陆 聊天 多人聊天室 文件传输
- iOS AFNetworking基本使用
- Apache2 Install on Ubuntu 14.04
- 华为OJ 二叉树遍历
- mybatis注解详解
- zoj3929 Deque and Balls 【找规律】
- C和C指针读书笔记
- lightoj 1383 - Underwater Snipers 二分+贪心
- 安卓开发培训(3.1 文件读写)
- 练习二1004
- Special equations(数学筛)
- RMQ 算法