| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 720 人关注过本帖
标题:二叉树的问题
只看楼主 加入收藏
佳嘉
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:3
帖 子:534
专家分:1383
注 册:2009-11-8
结帖率:96.55%
收藏
已结贴  问题点数:10 回复次数:9 
二叉树的问题

#include<stdio.h>
#include<stdlib.h>
#define NULL 0
#define max 30      /*二叉树中做多的结点数*/
typedef struct btnode  /*定义二叉树的结点类型*/
{
    char data;  /*结点的数据为字符型数据*/
    struct btnode *lchild,*rchild; /*左右指针*/
}bttree;
bttree *cre_tree(char *str,int i,int m)  /*将字符串中的第i个字符到第m个字符作为数据生成对应的满二叉树*/
{
    bttree *p;
    if(i>=m)    /*无效结点*/
        return NULL;
    p=(bttree *)malloc(sizeof(bttree));   
    p->data=str[i];
    p->lchild=cre_tree(str,2*i+1,m);   /*创建新结点的左子树*/
    p->rchild=cre_tree(str,2*i+1,m);   /*创建结点的优子树*/
    return p;
}
void preorder(bttree *t)  /*先序遍历二叉树*/
{
    if(t!=NULL)
    {
        printf("%c",t->data);
        if(t->lchild)
        {
            printf("->");
            preorder(t->lchild);
        }
        if(t->rchild)
        {
            printf("->");
            preorder(t->rchild);
        }
    }
}
void inorder(bttree *t)  /*中序遍历二叉树*/
{
     if(t!=NULL)
     {
         inorder(t->lchild);
         printf("%c",t->data);
         printf("->");
         inorder(t->rchild);
     }
}
void postorder(bttree *t) /*后续遍历二叉树*/
{
    if(t!=NULL)
    {
        postorder(t->lchild);
        printf("%c",t->data);
        printf("->");
        inorder(t->rchild);
    }
}

   
void main()
{
    int i,n;
    char str[max];  
    bttree *root;  /* *root为指向根结点的指针*/
    printf("please input a bbtree node num:\n");
    scanf("%d",&n);
    getchar(); /*输入数字*/
    printf("please input a string which length is %d:",n);
    for(i=0;i<n;i++)  /*输入字符串*/
        str[i]=getchar();
    printf("\n");
    root=cre_tree(str,0,n);  /*生成二叉树*/
    printf("the tree is already created\n");
    printf("\n");
    printf("the result sfter preorder processing :");  /*先序遍历后输出结果*/
    preorder(root);
    printf("\n");
    printf("the result sfter inorder processing :"); /*中序遍历后输出结果*/
    inorder(root);
    printf("\n");
    printf("the result sfter postorder processing :");/*后续遍历后输出结果*/
    postorder(root);
}
请大家帮我看看创建二叉树部分有没有错误??
搜索更多相关主题的帖子: 二叉树 
2009-11-30 18:38
玩出来的代码
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:河南新乡
等 级:贵宾
威 望:11
帖 子:742
专家分:2989
注 册:2009-10-12
收藏
得分:10 
p->rchild=cre_tree(str,2*i+2,m);不是给你说了,把这改了,后序改了,还有什么问题?   

离恨恰如春草,更行更远还生。
2009-12-01 13:14
佳嘉
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:3
帖 子:534
专家分:1383
注 册:2009-11-8
收藏
得分:0 
我认为生成二叉树的部分有问题,你运行一下试试
2009-12-01 13:28
玩出来的代码
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:河南新乡
等 级:贵宾
威 望:11
帖 子:742
专家分:2989
注 册:2009-10-12
收藏
得分:0 
能正常运行,结果正确,没问题,你运行那出错了?

离恨恰如春草,更行更远还生。
2009-12-01 14:09
佳嘉
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:3
帖 子:534
专家分:1383
注 册:2009-11-8
收藏
得分:0 
如果输入四个字符,怎么遍历输出的并不是4个字符????
2009-12-01 15:51
玩出来的代码
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:河南新乡
等 级:贵宾
威 望:11
帖 子:742
专家分:2989
注 册:2009-10-12
收藏
得分:0 
图片附件: 游客没有浏览图片的权限,请 登录注册

离恨恰如春草,更行更远还生。
2009-12-01 21:09
佳嘉
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:3
帖 子:534
专家分:1383
注 册:2009-11-8
收藏
得分:0 
图片附件: 游客没有浏览图片的权限,请 登录注册
2009-12-01 21:22
佳嘉
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:3
帖 子:534
专家分:1383
注 册:2009-11-8
收藏
得分:0 
我的运行结果是这个样子
2009-12-01 21:23
玩出来的代码
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:河南新乡
等 级:贵宾
威 望:11
帖 子:742
专家分:2989
注 册:2009-10-12
收藏
得分:0 
#include<stdio.h>
#include<stdlib.h>
#define NULL 0
#define max 30      /*二叉树中做多的结点数*/
typedef struct btnode  /*定义二叉树的结点类型*/
{
    char data;  /*结点的数据为字符型数据*/
    struct btnode *lchild,*rchild; /*左右指针*/
}bttree;
bttree *cre_tree(char *str,int i,int m)  /*将字符串中的第i个字符到第m个字符作为数据生成对应的满二叉树*/
{
    bttree *p;
    if(i>=m)    /*无效结点*/
        return NULL;
        else{
    p=(bttree *)malloc(sizeof(bttree));   
    p->data=str[i];
    p->lchild=cre_tree(str,2*i+1,m);   /*创建新结点的左子树*/
    p->rchild=cre_tree(str,2*i+2,m);}   /*创建结点的优子树*/
    return p;
}
void preorder(bttree *t)  /*先序遍历二叉树*/
{
    if(t!=NULL)
    {
        printf("%c",t->data);
        if(t->lchild)
        {
            printf("->");
            preorder(t->lchild);
        }
        if(t->rchild)
        {
            printf("->");
            preorder(t->rchild);
        }
    }
}
void inorder(bttree *t)  /*中序遍历二叉树*/
{
     if(t!=NULL)
     {
         inorder(t->lchild);
         printf("%c",t->data);
         printf("->");
         inorder(t->rchild);
     }
}
void postorder(bttree *t) /*后续遍历二叉树*/
{
    if(t!=NULL)
    {
        postorder(t->lchild);
        postorder(t->rchild);
        printf("%c",t->data);
        printf("->");
    }
}

   
void main()
{
    int i,n;
    char str[max];  
    bttree *root;  /* *root为指向根结点的指针*/
    printf("please input a bbtree node num:\n");
    scanf("%d",&n);
    getchar(); /*输入数字*/
    printf("please input a string which length is %d:",n);
    for(i=0;i<n;i++)  /*输入字符串*/
        str[i]=getchar();
    printf("\n");
    root=cre_tree(str,0,n);  /*生成二叉树*/
    printf("the tree is already created\n");
    printf("\n");
    printf("the result sfter preorder processing :");  /*先序遍历后输出结果*/
    preorder(root);
    printf("\n");
    printf("the result sfter inorder processing :"); /*中序遍历后输出结果*/
    inorder(root);
    printf("\n");
    printf("the result sfter postorder processing :");/*后续遍历后输出结果*/
    postorder(root);
    getch();
}
你看看那不一样。

离恨恰如春草,更行更远还生。
2009-12-01 21:31
佳嘉
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:3
帖 子:534
专家分:1383
注 册:2009-11-8
收藏
得分:0 
回复 9楼 玩出来的代码
太感谢你了,我想了很久的!
2009-12-01 21:39
快速回复:二叉树的问题
数据加载中...
 
   



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

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