zoukankan      html  css  js  c++  java
  • 二叉树遍历

    题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=83498#problem/D

    题意:

          利用二叉树的先序遍历和中序遍历序列,求出后序遍历序列,输出后序遍历序列。(可输入多组案例,每个字符串是不超过26个不同字母组成的)

          案例:

          input

             DBACEGF ABCDEFG

             BCAD CBAD

          output

             ACBFGED

             CDAB

    思路分析:

                  先序=根节点+左子树+右子树

                  中序=左子树+根节点+右子树

                  后序=左子树+右子树+根节点

               由上述可知,根节点在先序序列中都处于最前面的位置,而在中序中是处于中间的位置,则可以先找到根节点在把左右分成两个不同的序列,通过相关计算找出两个序列在先序的位          置,而树的每一层都有节点,可通过递归找出每一层的节点。建立树。

               因为在后序中节点处于最后的位置,则可进行倒叙储存。

              后序是先左子树再右子树,而节点是进行倒序储存,所以要先进行右子树的寻找,再进行左子树节点的寻找

              递归需要结束条件,如果节点等于中序遍历序列的最前位,则左子树为空,结束左子树节点的寻找。如果节点等于中序遍历序列的最后位,则右子树为空,结束右子树节点的寻找。

    源代码如下:

     1 #include<iostream>
     2 #include<cstring>
     3 #include<cstdio>
     4 using namespace std;
     5 char a[30],b[30],c[30];
     6 int n,m;
     7 void build(int x1,int y1,int x2,int y2)     
     8 {
     9     m--;
    10     c[m]=a[x1];               //倒叙储存节点
    11     int i=x2;
    12     while(b[i]!=c[m])i++;     //找到中序遍历序列中节点的位置
    13     int s=i-x2;
    14     if(i!=y2)build(x1+s+1,y1,i+1,y2);     //寻找右子树节点
    15     if(i!=x2)build(x1+1,x1+s,x2,i-1);     //寻找左子树节点
    16 }
    17 int main()
    18 {
    19     while(scanf("%s%s",a,b)!=EOF)
    20     {
    21         n=strlen(a);               //求出序列长和节点个数
    22         m=n;
    23         build(0,n-1,0,n-1);       //建立树
    24         for(int i=0;i<n;i++)
    25             cout<<c[i];
    26         cout<<endl;
    27     }
    28     return 0;
    29 }

          

  • 相关阅读:
    UVA 1025 A Spy in the Metro DP水题
    ZOJ 3814 Sawtooth Puzzle BFS
    ZOJ 3816 Generalized Palindromic Number
    UVA 10859 Placing Lampposts 树形DP
    UVA 11825 Hackers' Crackdown 状压DP
    POJ 2887 Big String 线段树 离线处理
    POJ 1635 Subway tree systems Hash法判断有根树是否同构
    BZOJ 3110 k大数查询 & 树套树
    sdoi 2009 & 状态压缩
    来自于2016.2.24的flag
  • 原文地址:https://www.cnblogs.com/q-c-y/p/4666890.html
Copyright © 2011-2022 走看看