数据结构之树结构——二叉树

树结构是一种常用的非线性数据结构。


树的形式化定义:树是由n(n>=0)个结点组成的有穷集合,在任意的一个非空树中,有且仅有一个称为根(Root)的结点,当n>1时,其余的结点分为m(m>0)个互不相交的有限集,T1,T2,……Tm,其中,每一个集合本身又是一棵树,并称为根的子树(SubTree)。


树结构在计算机中的存储形式很多,最简单的一种就是多重链表,可描述如下:

#define MaxChild 10

typedef struct node

{

dataType data;

struct node *child[MaxChild];

}

这种表示方法最大的有点是节省内存资源,缺点是操作起来相对复杂。


二叉树(Binary Tree)是一种特殊的树结构,其定义如下:它或者为空,或者由一个根节点加上两颗分别称为左子树和右子树的互不相交的二叉树组成。

typedef struct BiTNode

{

ElemType data;

struct BiTNode *lchild, *rchild;

}BiTNode, *BiTree;


二叉树的遍历

1、先序遍历(访问根结点,先序遍历左子树,先序遍历右子树)

PreOrderTraverse(BiTree T)

{

if (T) /* 递归结束条件,T为空 */

{

visit(T->data);

PreOrderTraverse(T->lchild);

PreOrderTraverse(T->rchild);

}

}


2、中序遍历(中序遍历左子树,访问根结点,中序遍历右子树)

InOrderTraverse(BiTree T)

{

if (T) /* 递归结束条件,T为空 */

{

InOrderTraverse(T->lchild);

visit(T->data);

InOrderTraverse(T->rchild);

}

}


3、后序遍历(后序遍历左子树,后序遍历右子树,访问根结点)

PosOrderTraverse(BiTree T)

{

if (T) /* 递归结束条件,T为空 */

{

PosOrderTraverse(T->lchild);

PosOrderTraverse(T->rchild);

visit(T->data);

}

}


二叉树的创建

/* 先序创建一颗二叉树 */

CreateBiTree(BiTree *T)

{

char c;

scanf("%c", &c);


if (c == ' ') *T = NULL;

else

{

*T = (BiTNode *)malloc(sizeof(BiTNode));

(*T)->data = c;

CreateBiTree(&((*T)->lchild));

CreateBiTree(&((*T)->rchild));

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值