• UVa 二叉树重建(先序+中序求后序)


    题意是给出先序和中序,求出后序。

    先序遍历先访问根结点,通过根结点可以在中序中把序列分为左子树部分和右子树部分,我建了一个栈,因为后序遍历最后访问根结点,所以把每次访问的根结点放入栈中。因为后序遍历先是左子树然后是右子树,所以在递归的时候就先递归右子树,然后继续递归左子树。

    写完程序后有个错误,找了很久才发现,就是我原本在计算左子树个数的时候,是这样计算的,pre2=mid-pre,但是当pre>mid时,就不对了。而正确计算左子树的方法应该是下面这样的。

     1 #include<iostream>
     2 #include<cstring>
     3 #include<stack>
     4 using namespace std;
     5 
     6 char t1[30], t2[30];
     7 stack<char>map;
     8 int length;
     9 
    10 void solve(int pre, int mid, int len)
    11 {
    12     map.push(t1[pre]);
    13     int i = mid;
    14     while (t2[mid] != t1[pre]) mid++;             //在中序序列中找到与前序序列相同的结点
    15     int pre2 = mid - i;                            //左子树的数量
    16     int mid2 = len - 1 - pre2;                     //右子树的数量
    17     if (mid2 >= 1)                                 
    18         solve(pre + pre2 + 1, mid + 1, mid2);
    19     if (pre2 >= 1)
    20         solve(pre + 1, mid - pre2, pre2);
    21 }
    22 
    23 
    24 int main()
    25 {
    26     while (cin >> t1 >> t2)
    27     {
    28         length = strlen(t1);
    29         solve(0, 0, length);
    30         while (!map.empty())
    31         {
    32             char s = map.top();
    33             cout << s;
    34             map.pop();
    35         }
    36         cout << endl;
    37     }
    38     return 0;
    39 }

     后来数据结构实验的时候也要写这么的一个算法,主要部分就是

     1 bintree buildBintree(char *pre, char *mid,int length)
     2 {
     3     int lch,rch;
     4     bintree root;
     5     root=(bintree)malloc(sizeof(binnode));
     6     lch=0;
     7     root->data=*pre;
     8     while(*mid!=*pre)  {mid++;lch++;}
     9     rch=length-1-lch;
    10     if(rch>=1) root->rchild=buildBintree(pre+lch+1,mid+1,rch);
    11     else root->rchild=NULL;
    12     if(lch>=1) root->lchild=buildBintree(pre+1,mid-lch,lch);
    13     else root->lchild=NULL;
    14     return root;
    15 }

    一开始没加11和13语句,然后就不对,看来这个指针问题得好好注意一下。

  • 相关阅读:
    ASP.NET Web API 框架研究 Self Host模式下的消息处理管道
    ASP.NET Web API 框架研究 Web Host模式下的消息处理管道
    ASP.NET Web API 框架研究 核心的消息处理管道
    ASP.NET Web API 框架研究 Web Host模式路由及将请求转出到消息处理管道
    ASP.NET Web API 框架研究 ASP.NET Web API 路由
    ASP.NET Web API 框架研究 ASP.NET 路由
    ASP.NET Web API 入门 (API接口、寄宿方式、HttpClient调用)
    MVVM模式
    RESTful Web API 理解
    C# 函数式编程及Monads.net库
  • 原文地址:https://www.cnblogs.com/zyb993963526/p/6185394.html
Copyright © 2020-2023  润新知