免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12
最近访问板块 发新帖
楼主: reiase
打印 上一主题 下一主题

[C] 二叉树,文本双向转换 [复制链接]

论坛徽章:
0
11 [报告]
发表于 2008-04-01 15:02 |只看该作者

回复 #10 reiase 的帖子

我的意思是你如果用递归,会让你的代码更可读一些.

论坛徽章:
0
12 [报告]
发表于 2008-04-01 15:38 |只看该作者
while (!feof(f)){
        if (!fscanf(f,"%c",&CurrToken)) goto die;
        switch (CurrToken){
        case ':':
            fscanf(f,"%s",(tree[pn].name));
            fscanf(f,"%s",(tree[pn].tempfile0));
            fscanf(f,"%s",(tree[pn].tempfile1));

            if (lastToken == '(')
                tree[*stacktop].child0 = tree + pn;
            if (lastToken == ',')
                tree[*stacktop].child1 = tree + pn;
            break;
        case '(':
            *(++stacktop) = pn;
            pn++;
            break;
        case ')':
            stacktop --;
            break;
        case ',':
            pn++;
            break;
        case ' ':
            break;
        default:
            break;
        }

        if (CurrToken == ',' || CurrToken == '(' || CurrToken == ')')
            lastToken = CurrToken;
    }
这个循环吗?
其实这是个非常拙劣的自动机,我也想改成递归方式实现,因为递归方式优雅,易懂。而且二叉树只在程序启动时要创建,因此解析文本的代码慢点无所谓。只是现在想不出来怎么递归实现。

论坛徽章:
3
2015年迎新春徽章
日期:2015-03-04 09:56:11数据库技术版块每日发帖之星
日期:2016-08-03 06:20:00数据库技术版块每日发帖之星
日期:2016-08-04 06:20:00
13 [报告]
发表于 2008-04-01 17:32 |只看该作者
原帖由 reiase 于 2008-3-31 21:09 发表
解决了,使用中序遍历,加栈方式来解决
A(B(C,D),E)实质上是对树的中序遍历,恢复的时候算法如下

take A, make node A
take ( , push A into stack
take B, make node B,left child of A
take ( , push  ...

不是中序,而是前序

论坛徽章:
0
14 [报告]
发表于 2008-04-01 18:15 |只看该作者

回复 #13 cjaizss 的帖子

汗  我分不太清楚
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP