二叉树的定义:二叉树由节点的有限集合构成,这个有限集合或者为空集,或者为由一个根节点(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;
}
输入及输出:
后记:
最近在看一本书,是红衣教主周鸿祎写的《个人互联网方法论》,他讲到了互联网的本质——Free,没错,就是免费,Internet这条信息高速公路不单单须要哪些专业人士去建造,并且须要咱们每个人来贡献出一些东西,咱们须要站在巨人的肩膀上去眺望将来,编程也是这样,不要刀耕火种,咱们须要交流,相互交流,这也是我为何要花个人一部分时间来写博客的缘由,我所写的这些东西也许都是上个世纪的产物了,不少人都在写,可是我但愿咱们每一个人都来写,由于分享知识历来都是一件使人快乐的事。node