二叉树的基本操作,创建、输入前序遍历、中序遍历、后续遍历以及层次遍历

最近用到数据结构,之前也没学过,跑到图书馆看了几个版本的书,但是都记不住,总感觉少了点什么,直到自己动手的时候才发现....完了,真的是啥也不会

于是到B站自己刷视频,边看边操作,同时也看了很多博主的文章,做了一点总结,熬了俩星期,终于学会了点皮毛(个人脑子不是很好使),自己把过程也记录下来,方便以后用到

话不多说直接上代码

#include <stdio.h>
#include <stdlib.h>
bool flag = true;      //有些编译器不认bool,需要改成  _Bool
#define true 1        //我也说不清楚,有些编译器不能直接用true和false,所以提前定义一下
#define false 0
typedef struct node 
{
	int data;            //定义数据域
	struct node *lchild,*rchild;        //左、右子节点
} bitree;        //初学数据结构,才知道这叫取别名


//结构体初始化
void init(bitree *bt)
{
    bt=(bitree *)malloc(sizeof(bitree *));
    bt->lchild=NULL;
    bt->rchild=NULL;
}

//建立二叉树
bitree *creat()
{
	bitree *bt;
    int x;
    scanf("%d",&x);
    if(x==0)             //以输入0为结束字符
		bt=NULL;
    else
    {
        bt=(bitree *)malloc(sizeof(bitree));        //生成动态节点
        bt->data = x;
        bt->lchild = creat();       //递归法(不懂的小伙伴可自行查找何为递归)创建左、右子节点(个人习惯这么叫)
        bt->rchild = creat();
    }
    return bt;
}

//先序遍历二叉树
void preorder(bitree *bt)
{
    if(bt!=NULL)
    {
        printf("   %d",bt->data);
        preorder(bt->lchild);        //同样是递归法进行遍历,下面也是,不多赘述
        preorder(bt->rchild);
    }
}

//中序遍历二叉树
void inorder(bitree *bt)
{
    if(bt!=NULL)
    {
        inorder(bt->lchild);
        printf("   %d",bt->data);
        inorder(bt->rchild);
    }
}

//后序遍历二叉树
void postorder(bitree *bt)
{
     if(bt!=NULL)
    {
        postorder(bt->lchild);
        postorder(bt->rchild);
        printf("   %d",bt->data);

    }
}

/*层次法遍历二叉树*/
bool levorder(bitree *bt) 
{
	
	if (bt == NULL) 
	{
		return false;
	}
	if (bt != NULL && flag == true)         //只进行一次遍历,否则会重复输出
	{ 
		printf("   %d", bt->data);
		flag = false;
	}
	if (bt->lchild != NULL) 
	{ 
		printf("   %d", bt->lchild->data);
	}
	if (bt->rchild != NULL) 
	{ 
		printf("   %d", bt->rchild->data);
	}
	levorder(bt->lchild); 
	levorder(bt->rchild); 
	return true;
}

//主函数
int main() 
{
	bitree *root;
	init(root);
	root=creat();
	printf("\n先序遍历的结果:");
	preorder(root);
	printf("\n中序遍历的结果:");
	inorder(root);
	printf("\n后序遍历的结果:");
	postorder(root);
	printf("\n层次遍历的结果:");
	levorder(root);
	printf("\n");
	return 0;
}

大学里面二叉树基本上也就用这些,重点大学我就不好说了

おすすめ

転載: blog.csdn.net/little_Muxue/article/details/120998191