目前正在学习数据结构,这是二叉树这一章的基本操作的内容,包括创建二叉树,树的前序,中序,后序遍历的递归和非递归算法。借鉴了大佬们的代码,然后分享出来,希望能帮到别人。
注意:
一、
这是用递归先序的方法创建二叉树,如果有不懂的可去B站搜索“懒猫老师”,她讲的很好,一听就能懂。
二、
非递归遍历二叉树,也是利用了栈,建立一个顺序栈,用数组实现,定义的“int box_top“不是指针,只是将它当做数组的下标,以便使用的方便。把栈顶指针“(box_top)”指向-1,是为了和数组下标保持一致。如果有看不懂那个代码的可以自己先在草稿本上手动模拟以便执行过程,这样再来理解代码就很容易了。
三、递归创建二叉树的代码
//按(递归)先序次序输入二叉树中节点的值(一个字符),创建二叉链表表示的二叉树T
BiTNode* CreatBiTree(BiTNode *T)
{
char ch;
scanf("%c",&ch);
if(ch=='#') T=NULL;//如果接收的字符为“#”,就返回一个空值
else
{
T=(BiTNode *)malloc(sizeof(BiTNode));//动态申请一个节点空间
T->data=ch; //将ch的值赋给T->data域
T->lchild=CreatBiTree(T->lchild); //递归调用到左子树的某个节点的左孩子节点为空(输入为#)时,返回空,并将这个空值赋给该节点的左孩子域。
T->rchild=CreatBiTree(T->rchild); //递归调用到右子树的某个节点的右孩子节点为空(输入为#)时,返回空,并将这个空值赋给该节点的右孩子域。
}
return T;
}
四、完整代码如下:
#include<stdio.h>
#include&