c语言二叉树建立,二叉树 - 先序建立一棵二叉树(C语言)

二叉树的定义:二叉树由节点的有限集合构成,这个有限集合或者为空集,或者为由一个根节点(root)及两棵互不相交、分别称做这个根的左子树(left subtree)和右子树(right subtree)的二叉树组成的集合。

按照先序序列输入的数据构建一棵由先序方式构建的二叉树:代码以下

/* 先序建立一棵任意二叉树 */

/* 注意:输入数据的顺序颇有特色,本题输入的顺序要求为,先是根节点,再是左子树,再是右子树 */

#include

#include

using namespace std;

typedef int ElementType; //给int起别名为ElementType, typedef是起别名的意思

typedef struct bitnode //定义二叉树节点数据类型

{

ElementType data;

struct bitnode *left, *right;

} bitnode, *bitree; //bitree为指向bitnode这种结构的指针

bitree PerCreateTree(bitree T); //先序建立一棵二叉树

void PerOrder(bitree T); //先序输出一棵二叉树

bitree FreeTree(bitree T); //释放空间

//先序建立一棵二叉树

bitree PerCreateTree()

{

bitree T;

ElementType item;

cin >> item;

if( item == 0 ) //叶节点数据标志:其后根两个0

T = NULL; //若某一节点为叶子结点,则其左右子树均为NULL,0表示建空树

else

{

T = (bitree)malloc(sizeof(bitnode));

T->data = item;

T->left = PerCreateTree(); //递归建立其左子树

T->right = PerCreateTree(); //递归建立其右子树

}

return T; //返回根节点

}

//先序递归周游二叉树

void PerOrder(bitree T)

{

if( T ) // T != NULL

{

cout << T->data << " ";

PerOrder(T->left); //递归先序周游其左子树

PerOrder(T->right); //递归先序周游其右子树

}

}

//释放空间

bitree FreeTree(bitree T)

{

if( T )

{

FreeTree(T->left); //递归释放其左子树

FreeTree(T->right); //递归释放其右子树

free(T); //释放根节点

T = NULL; //释放指向根节点的指针

}

return T; //返回释放后的根节点NULL

}

int main()

{

bitree root;

cout << "请输入数据先序建立一棵二叉树:";

root = PerCreateTree(); //先序建立一棵二叉树

cout << "先序周游的结果:";

PerOrder(root); //先序周游

cout << endl;

return 0;

}

输入及输出:

31d2fd53b8ae8e4a485d2537303e10c4.png

后记:

最近在看一本书,是红衣教主周鸿祎写的《个人互联网方法论》,他讲到了互联网的本质——Free,没错,就是免费,Internet这条信息高速公路不单单须要哪些专业人士去建造,并且须要咱们每个人来贡献出一些东西,咱们须要站在巨人的肩膀上去眺望将来,编程也是这样,不要刀耕火种,咱们须要交流,相互交流,这也是我为何要花个人一部分时间来写博客的缘由,我所写的这些东西也许都是上个世纪的产物了,不少人都在写,可是我但愿咱们每一个人都来写,由于分享知识历来都是一件使人快乐的事。node

  • 6
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值