| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 690 人关注过本帖
标题:问题:创建二叉树 问题
只看楼主 加入收藏
lhj2005
Rank: 1
等 级:新手上路
帖 子:230
专家分:0
注 册:2007-1-23
收藏
 问题点数:0 回复次数:4 
问题:创建二叉树 问题
A(B(D,F),C(H,))

碰到'(' 下一个字符在左边分支创建节点

碰到',' 下一个字符在右边分支创建节点

碰到')' 不创建

A
|
B ------- C
|         |
D - F     H

求思路,或者代码,呵呵
搜索更多相关主题的帖子: 二叉树 
2008-12-07 02:18
zqy110007
Rank: 3Rank: 3
来 自:外太空
等 级:论坛游民
威 望:6
帖 子:1493
专家分:82
注 册:2008-11-19
收藏
得分:0 
二叉树是什么啊?

每个人都是蛤蟆,只是井的大小不同罢了.
沙石下的泉水,挖得越深,泉水越清.
2008-12-07 09:38
jdh99
Rank: 2
来 自:南师大
等 级:论坛游民
威 望:1
帖 子:59
专家分:15
注 册:2008-11-7
收藏
得分:0 
关于二叉树的操作数据结构书中介绍的很清楚,自己练习才有收获

作鲲鹏,遨游于天地沧海
2008-12-07 13:50
lhj2005
Rank: 1
等 级:新手上路
帖 子:230
专家分:0
注 册:2007-1-23
收藏
得分:0 
我是新手,书上写的太深了,创建的地方没有写的很细,请讲述下

或则推荐本书,要讲的细点的
2008-12-07 14:12
jdh99
Rank: 2
来 自:南师大
等 级:论坛游民
威 望:1
帖 子:59
专家分:15
注 册:2008-11-7
收藏
得分:0 
根据你的意思,你的访问序列有问题,应该是:A(B(D,F),C(H),),)
这样才能得到你要的二叉树
参考代码如下,符合你的要求,VC6下编译通过:
#include<stdio.h>

typedef struct BiTree//存储链表存储结构
{
  char data;
  struct BiTree *lchild,*rchild;
}*BT;

BT create(BT T)//创建二叉链表
{
    char ch;
    printf("输入数据:\n");
    ch = getchar();getchar();
    if(ch == ')')
    {
        T=NULL;
        return T;
    }
    else
    {
        T = (BT *)malloc(sizeof(BT));
        T->data = ch;
    }
    printf("输入操作符:\n");
    ch = getchar();getchar();
    if(ch == '(')//左子树
    {
        T->lchild = create(T->lchild);
        printf("输入操作符:\n");
        ch = getchar();getchar();
        if(ch == ',')//左子树访问后接着访问右子树
        {
            T->rchild = create(T->rchild);
        }
        else
        {
            printf("输入操作符有误:\n");
            T->rchild = NULL;
        }
    }
    else
    {
        if(ch == ',')//直接访问右子树,左子树置空
        {
            T->lchild = NULL;
            T->rchild = create(T->rchild);
        }
        else
        {
            if(ch == ')')
            {
                T->lchild = NULL;
                T->rchild = NULL;
            }
            else
            {
                printf("操作符输入有误:\n");
            }
        }
    }    
    return T;
}
void PreOrder(BT T)//先序遍历
{

   if(T != NULL)
   {
        Visit(T->data);
        PreOrder(T->lchild);
        PreOrder(T->rchild);
   }
}
Visit(char a)
{
    printf("%c\t",a);
}

main()
{
    char ch;
    BT T;
    T = create(T);    
    PreOrder(T);
}

输入输出:
输入数据:
A
输入操作符:
(
输入数据:
B
输入操作符:
(
输入数据:
D
输入操作符:
,
输入数据:
F
输入操作符:
)
输入操作符:
,
输入数据:
C
输入操作符:
(
输入数据:
H
输入操作符:
)
输入操作符:
,
输入数据:
)
输入操作符:
,
输入数据:
)
A       B       D       F       C       H       Press any key to continue

作鲲鹏,遨游于天地沧海
2008-12-07 16:29
快速回复:问题:创建二叉树 问题
数据加载中...
 
   



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

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