| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1880 人关注过本帖
标题:关于二叉树求后序遍历
只看楼主 加入收藏
cblovehh
Rank: 1
等 级:新手上路
帖 子:39
专家分:0
注 册:2008-10-14
收藏
 问题点数:0 回复次数:10 
关于二叉树求后序遍历
Cproject.exe 中的 0x00411509 处未处理的异常: 0xC00000FD: Stack overflow
报的错是栈溢出,实在不会调了,请高手们帮帮忙!!
程序代码:
#include <stdio.h>
#include <string.h>
#define N 20

/*
typedef struct tree
{
    char data;
    typedef struct tree *rlink,*llink;
}t_tree;
*/

void work(char* x, char* y);
char* copy(char* s, int n, int m);
int pos(char a, char* b);

char sx[N],sy[N];

void work(char* x, char* y)
{
    int l,c;
    if(x != "")
    {
        l = strlen(x);
        c = pos(x[0], y);                   //根在中序序列中的位置
        work(copy(x, 1, c-1),copy(y, 0, c-1));  //递归调用左子树
        work(copy(x, c+1, l-c),copy(y, c+1, l-c));//递归调用右子树
        printf("%c",x[0]);                  //后序输出根结点
    }   

}

int pos(char a, char* b)
{
    int i,l;
    l = strlen(b);
    for(i = 0; i < l; i ++)
        if(b[i] == a)
            return i;
}

char* copy(char* s, int n, int m)
{
    int i,j=0;
    char str[N];
    for(i = n; i <= m; i ++)
        str[j++] = s[i];
    return str;
}

int main()
{
    char x[N]={"abcdefg"};      //前序
    char y[N]={"cbdafeg"};      //中序
    work(x,y);
    return 0;
}


[[it] 本帖最后由 cblovehh 于 2008-10-23 17:46 编辑 [/it]]
搜索更多相关主题的帖子: 二叉树 求后序 遍历 
2008-10-23 17:26
debroa723
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:23
帖 子:862
专家分:1954
注 册:2008-10-12
收藏
得分:0 
char* copy(char* s, int n, int m)
{
    int i,j=0;
    char str[N];
    for(i = n; i <= m; i ++)
        str[j++] = s[i];
    return str;
}
中char str[N];为临时变量,返回它的首地址将不会得到正确的字串。从copy返回的时候,str变量就不存在了。所以,str使用指针并从外部传入。
char* copy(char* s, int n, int m , char* str)
{
//注意str为合法指针
    int i,j=0;
    for(i = n; i <= m; i ++)
        str[j++] = s[i];
    return str;
}
work函数做如下改动
void work(char* x, char* y)
{
       int l,c;
    if(x[0] != '\0')
    {
        l = strlen(x);
        c = pos(x[0], y);                  //根在中序序列中的位置
        char str1[N]="";
        char str2[N]="";
        work(copy(x, 1, c-1,str1),copy(y, 0, c-1,str2));  //递归调用左子树
        work(copy(x, c+1, l-c,str1),copy(y, c+1, l-c,str2));//递归调用右子树
        printf("%c",x[0]);                  //后序输出根结点
    }
}

感觉还有其它的错误,自己检查一下,上面只是告诉你如何在递归中使用字串返回值,并不一定逻辑正确。注意指针问题,数组溢出问题。
2008-10-23 18:04
cblovehh
Rank: 1
等 级:新手上路
帖 子:39
专家分:0
注 册:2008-10-14
收藏
得分:0 
回复 2# debroa723 的帖子
非常感谢,我试试看

我是OVER!!!    我是OVER!!!    我是OVER!!!
2008-10-24 11:42
cblovehh
Rank: 1
等 级:新手上路
帖 子:39
专家分:0
注 册:2008-10-14
收藏
得分:0 
问题还米有解决,报的错貌似在pos函数里面,我不会找了

我是OVER!!!    我是OVER!!!    我是OVER!!!
2008-10-24 11:55
cblovehh
Rank: 1
等 级:新手上路
帖 子:39
专家分:0
注 册:2008-10-14
收藏
得分:0 
OK了,栈溢出问题解决了

我是OVER!!!    我是OVER!!!    我是OVER!!!
2008-10-24 11:57
StarWing83
Rank: 8Rank: 8
来 自:仙女座大星云
等 级:贵宾
威 望:19
帖 子:3951
专家分:748
注 册:2007-11-16
收藏
得分:0 
try this!
程序代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define N 10

void work(const char *first, const char *middle)
{
    char *root, lfirst[N] = {0}, rfirst[N] = {0};
    char lmiddle[N] = {0}, rmiddle[N] = {0};

    if (strlen(first) != strlen(middle))
        return;
    else if (strlen(first) == 1)
    {
        putchar(first[0]);
        return;
    }
    root = strchr(middle, first[0]);
    if (root == NULL)
        return;

    strncpy(lmiddle, middle, root - middle);
    strcpy(rmiddle, root + 1);

    strncpy(lfirst, first + 1, root - middle);
    strcpy(rfirst, first + (root - middle) + 1);

    work(lfirst, lmiddle);
    work(rfirst, rmiddle);
    putchar(*root);
}

int main(void)
{
    char x[N] = {"abcdefg"};    //前序
    char y[N] = {"cbdafeg"};    //中序
    work(x, y);
    putchar('\n');
    return 0;
}


收到的鲜花
  • cblovehh2008-10-24 12:43 送鲜花  3朵  

专心编程………
飞燕算法初级群:3996098
我的Blog
2008-10-24 12:18
cblovehh
Rank: 1
等 级:新手上路
帖 子:39
专家分:0
注 册:2008-10-14
收藏
得分:0 
正想着怎么用链表写呢,谢谢SW咯

我是OVER!!!    我是OVER!!!    我是OVER!!!
2008-10-24 12:33
cblovehh
Rank: 1
等 级:新手上路
帖 子:39
专家分:0
注 册:2008-10-14
收藏
得分:0 
回复 6# StarWing83 的帖子
再次感谢SW,偶走弯路了,原来偶知道的函数还是太少了,

我是OVER!!!    我是OVER!!!    我是OVER!!!
2008-10-24 12:37
StarWing83
Rank: 8Rank: 8
来 自:仙女座大星云
等 级:贵宾
威 望:19
帖 子:3951
专家分:748
注 册:2007-11-16
收藏
得分:0 
没关系,反正正复习《数据结构》呢……

上次考试我睡觉睡过了,所以这次是补考- -

说实在的,我没什么压力,要是这个都考不到90我也别在BCCN混了……不过复习这种表面工作还是要做的嘛……

专心编程………
飞燕算法初级群:3996098
我的Blog
2008-10-24 12:41
cblovehh
Rank: 1
等 级:新手上路
帖 子:39
专家分:0
注 册:2008-10-14
收藏
得分:0 
考研么?貌似偶是木有什么希望了
祝你别再睡过头了。。。

我是OVER!!!    我是OVER!!!    我是OVER!!!
2008-10-24 12:45
快速回复:关于二叉树求后序遍历
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.024585 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved