| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2353 人关注过本帖, 1 人收藏
标题:好吧,出个关于二叉树的有趣小题
只看楼主 加入收藏
lintaoyn
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:4
帖 子:606
专家分:2499
注 册:2009-4-8
收藏
得分:4 
程序代码:
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
struct BTree
{
    char n;
    BTree *l;
    BTree *r;
};
char put[100];//用于保存后序序列
int iput = 0;

/*先在前缀中确定子树树根,再在中序中找到这个树根的位置,并判断左右孩子的情况*/
void greateBT(BTree *root, char *nlr, char *lnr, int n)
{
    if(n)
    {
        //因为要后序输出,所以左右子树的创建顺序不能变动。
        root->n = *nlr;
        char *p = strchr(lnr,root->n);//p保存根在中序序列中的位置
        int ln = p-lnr;//左子树的序列长度
        if(ln){
            root->l = (BTree*) calloc(1,sizeof(BTree));
            greateBT(root->l, nlr+1, lnr, ln);//创建左子树
        }
        int rn = n-1-ln;
        if(rn){
            root->r = (BTree*) calloc(1,sizeof(BTree));
            greateBT(root->r, p-lnr+nlr+1, p+1, rn);//创建右子树
        }
    }
    put[iput++] = root->n;//为后序输出做准备
}
int main()
{
    char nlr[10];//先序序列
    char lnr[10];//中序序列
    printf("%s\n","输入先序和中序");
    scanf("%s%s",nlr,lnr);
    BTree *root = (BTree*) calloc(1,sizeof(BTree));
    greateBT(root,nlr,lnr,strlen(nlr));
    printf("%s\n",put);
    return 0;
}

迭代的是人,递归的是神。
2011-05-03 16:14
没有注册过的
Rank: 2
来 自:广西
等 级:论坛游民
帖 子:22
专家分:42
注 册:2011-4-16
收藏
得分:4 
非递归?好像没印象~!坐等高手~!

就是想学~!
2011-05-03 16:26
laoyang103
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:内蒙古包头
等 级:贵宾
威 望:19
帖 子:3082
专家分:11056
注 册:2010-5-22
收藏
得分:4 
循环栈就可以非递归  

我写的二叉树类  里面有循环栈
二叉树.zip (1.64 KB)

                                         
===========深入<----------------->浅出============
2011-05-03 17:12
那年
Rank: 3Rank: 3
来 自:湖南
等 级:论坛游侠
帖 子:83
专家分:141
注 册:2011-5-3
收藏
得分:4 
我只会伪代码……C还不会用手动实现……除非调用

前序序列:"EDBACHFG"  
中序序列: "ABCDEFGH"
后序序列: "ACBDGFHE"
                E
              /    \
             D      H
           /       /  
          B       F   
         / \      \
        A   C      G


              人生莫大的悲哀是不能坚持,今天计划明天,明天念着后天,这样总难成事。
2011-05-03 19:19
草狼
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:2
帖 子:577
专家分:1040
注 册:2010-4-6
收藏
得分:4 
建树的时候直接把后续存在数组中 最后输出数组算不算递归啊
2011-05-03 21:42
waterstar
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:5
帖 子:984
专家分:2810
注 册:2010-2-12
收藏
得分:0 
我偷懒了。

冰冻三尺,非一日之寒;士别三日,不足刮目相看!
2011-05-03 22:45
tayuqitan
Rank: 1
等 级:新手上路
帖 子:7
专家分:8
注 册:2011-4-29
收藏
得分:4 
啊,打击我信心啊,我正在学c语言,咋看都看不懂啊。郁闷。等学透了,再告诉你!

对计算机的爱好,和语言的爱好,是无人能敌的。
2011-05-04 07:43
无语的小虾米
Rank: 1
等 级:新手上路
帖 子:10
专家分:4
注 册:2011-4-16
收藏
得分:4 
~~(╯﹏╰)b,严重的学习中!
2011-05-04 12:23
Sliverwang
Rank: 2
等 级:论坛游民
帖 子:49
专家分:43
注 册:2011-4-1
收藏
得分:4 
留个名
2011-05-04 17:58
ok131415
Rank: 1
等 级:新手上路
帖 子:2
专家分:4
注 册:2011-5-4
收藏
得分:4 
佩服,刚来!!!

C的小菜鸟
2011-05-04 21:50
快速回复:好吧,出个关于二叉树的有趣小题
数据加载中...
 
   



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

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