6.1二叉树的创建

来源:互联网 发布:php判断原生语句查询 编辑:程序博客网 时间:2024/06/06 01:15

六.Tree(树)

6.1二叉树的创建

理解了树的创建过程,对递归的理解就会更上一层楼。

(1)树结构的声明

# define OK 1typedef struct bintree{struct bintree *lchild;char data;struct bintree *rchild;}BiNode, *BiTree;BiTree t;//头结点指针


(2)有了树结构我们就能先序创建二叉树了(注意递归)
int bintree_creat(BiTree *q){char n;n = getchar();if(n == '#')*q = NULL;else{(*q) = (BiTree )malloc(len);(*q)->data = n;bintree_creat(&(*q) -> lchild);bintree_creat(&(*q) -> rchild);}return OK;}

(3)反思:源代码中BiTree *q,(&(*q) -> lchild),令人难以理解。这源于人们对循环的理解(科学证明,正常人容易理解3层以内循环)。这时,C++的 & 运算符就简洁明了,容易理解了。

int bintree_creat(BiTree &q){char n;n = getchar();if(n == '#')q = NULL;else{q = (BiTree )malloc(len);q->data = n;bintree_creat(q -> lchild);bintree_creat(q -> rchild);}return OK;}

(4)检验。

二叉树建立完成,到底成功了没,我们不知道。那就遍历一下喽,见下一章6.2二叉树的遍历(含建立的完整源代码)。


后记:

初次接触C++的&时不理解为什么引入 &(refrence),既然有了指针 * ,不都能解决 了吗?C写多了,发现(1)&确实比*安全;(2)&更人性化,使程序编写简单,更易理解。


0 0