数据结构——基本数据结构之有根树


树是由一个或多个结点组成的有限集合,其中:
(1)必有一个特定的称为根(ROOT)的结点;
(2)剩下的结点被分成n>=0个互不相交的集合T1、T2、......Tn,而且, 这些集合的每一个又都是树。树T1、T2、......Tn被称作根的子树(Subtree)。
树的递归定义如下:
(1)至少有一个结点(称为根)
(2)其它是互不相交的子树
二叉树
二叉树也是递归定义的,其结点有左右子树之分。

BiTreeMain.c

#include  < stdio.h >
#include 
" bitree.h "

/*简单示例
 *输入:"abc##de#g##f###"
 
*/

int  main( int  argc,  char   ** argv)
{
    BiTree t;

    CreateBiTree(
&t);
    printf(
"CreateBiTree Succeed! ");

    printf(
"PreOrder:");
    PreOrderTraverse(t);

    printf(
" InOrder:");
    InOrderTraverse(t);

    printf(
" PostOrder:");
    PostOrderTraverse(t);
    printf(
" ");

    
return 0;
}

bitree.h
#ifndef _BITREE_H
#define  _BITREE_H

typedef 
char  ElemType;
typedef 
struct  BiTNode {
    ElemType data;
    
struct BiTNode *lchild;
    
struct BiTNode *rchild;
}
BiTNode,  * BiTree;

int  CreateBiTree(BiTree  * t);
int  PreOrderTraverse(BiTree t);
int  InOrderTraverse(BiTree t);
int  PostOrderTraverse(BiTree t);
int  LevelOrderTraverse(BiTree t);

#endif

bitree.c
#include  < stdio.h >
#include 
< stdlib.h >
#include 
" bitree.h "

int  CreateBiTree(BiTree  * t)
{
    ElemType elem;

    scanf(
"%c"&elem);
    
if(elem == '#')
    
{
        
*= NULL;
    }

    
else
    
{
        
if(!((*t) = (BiTree)malloc(sizeof(BiTNode))))
            exit(
1);
        (
*t)->data = elem;
        printf(
"CreateBiTree succeed at %c ", elem);
        CreateBiTree(
&((*t)->lchild));
        CreateBiTree(
&((*t)->rchild));
    }


    
return 1;
}


int  PreOrderTraverse(BiTree t)
{
    
if(t != NULL)
    
{
        printf(
"_%c_", t->data);
        PreOrderTraverse(t
->lchild);
        PreOrderTraverse(t
->rchild);
    }


    
return 1;
}


int  InOrderTraverse(BiTree t)
{
    
if(t != NULL)
    
{
        PreOrderTraverse(t
->lchild);
        printf(
"_%c_", t->data);
        PreOrderTraverse(t
->rchild);
    }


    
return 1;
}


int  PostOrderTraverse(BiTree t)
{
    
if(t != NULL)
    
{
        PreOrderTraverse(t
->lchild);
        PreOrderTraverse(t
->rchild);
        printf(
"_%c_", t->data);
    }


    
return 1;
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值