一、前置知识
要会函数,结构体,指针,队列等C语言基础
二、实现功能
1、输入想要创建树的结点数
2、用层序遍历(广搜)建一个二叉树
3、用前序遍历,中序遍历,后序遍历访问这颗树是否正确
4、释放树的所有内存,并让指针指向空
5、查看是否成功
三、10个结点建的树的图
四、代码运行效果
五、全部代码
#include<stdio.h>
#include<stdlib.h>
#include<queue>
using namespace std;
typedef struct Node
{
int data;//整形数据
struct Node * left;//左节点
struct Node * right;//右节点
}node, *pNode;//一个结点数据类型,一个结点指针数据类型
queue<pNode> q;//结点地址队列
void init(pNode pNd, int order);//初始化函数(层序遍历) ,order表示1到order的结点
void preOrder(pNode pNd);//前序遍历
void inOrder(pNode pNd);//中序遍历
void postOrder(pNode pNd);//后序遍历
void myDelete(pNode pNd);//释放树的所有空间 (后序遍历释放)
void myFree(pNode *ppNd);//调用myDelete,并让指针指向空
int main()
{
pNode pNd = (pNode)malloc(sizeof(node));
int k;//结点数
printf("请输入结点数:");
scanf("%d", &k);
init(pNd, k);
printf("前序遍历:");
preOrder(pNd);
printf("\n");
printf("中序遍历:");
inOrder(pNd);
printf("\n");
printf("后序遍历:");
postOrder(pNd);
printf("\n");
myFree(&pNd);
printf("pNd = %p\n", pNd);
return 0;
}
//调用myDelete,并让根节点指向空
void myFree(pNode *ppNd)
{
myDelete(*ppNd);
(*ppNd) = NULL;
}
//释放树的所有空间 (后序遍历释放)
void myDelete(pNode pNd)
{
if(!pNd) return;
myDelete(pNd->left);
myDelete(pNd->right);
printf("%d结点释放...\n", pNd->data);
free(pNd);
}
//后序遍历
void postOrder(pNode pNd)
{
if(!pNd) return;
postOrder(pNd->left);
postOrder(pNd->right);
printf("%d ", pNd->data);
}
//中序遍历
void inOrder(pNode pNd)
{
if(!pNd) return;
inOrder(pNd->left);
printf("%d ", pNd->data);
inOrder(pNd->right);
}
//前序遍历
void preOrder(pNode pNd)
{
if(!pNd) return;
printf("%d ", pNd->data);
preOrder(pNd->left);
preOrder(pNd->right);
}
//初始化函数(层序遍历) ,order表示1到order的结点
void init(pNode pNd, int order)
{
if(!pNd || order <= 0) return;
int i = 0;
pNd->data = ++i;
pNd->left = NULL;
pNd->right = NULL;
q.push(pNd);
pNode tP = NULL;
while(i < order)
{
tP = q.front();
q.pop();
tP->left = (pNode)malloc(sizeof(node));
tP->left->data = ++i;
tP->left->left = NULL;
tP->left->right = NULL;
q.push(tP->left);
if(i >= order) break;
tP->right = (pNode)malloc(sizeof(node));
tP->right->data = ++i;
tP->right->left = NULL;
tP->right->right = NULL;
q.push(tP->right);
}
tP = NULL;
while(!q.empty()) q.pop();
}