华为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
原创粉丝点击