typedef struct BiTNode{
int data;//数据域
struct BiTNode *lchild,*rchild;//左右孩子
}BiTNode,*BiTree;
//初始化
BiTree creatTree()
{
int value;//用来输入值
int temp;//用来读取“回车”
BiTree T;
scanf("%d",&value);
temp = getchar();
if(value == -1)
{
return NULL;
}
else
{
BiTree T = (BiTNode*)malloc(sizeof(BiTNode));//创建结点
T->data = value;//输入值
//遍历输入
printf("请输入%d的左子树",value);
T->lchild = creatTree();
printf("请输入%d的右子树",value);
T->rchild = creatTree();
return T;
}
}
//先序遍历
void PreOrder(BiTree T)
{
if(T!=NULL)
{
printf("%d\n",T->data);
PreOrder(T->lchild);
PreOrder(T->rchild);
}
}
//中序遍历
void InOreder(BiTree T)
{
if(T!=NULL)
{
InOreder(T->lchild);
printf("%d\n",T->data);
InOreder(T->rchild);
}
}
//后序遍历
void PostOrder(BiTree T)
{
if(T!=NULL)
{
PostOrder(T->lchild);
PostOrder(T->rchild);
printf("%d\n",T->data);
}
}
//层序遍历
void levelOrderTraversal(BiTree T)
{
if (T == NULL){ // 如果树为空,直接返回
return;
}
Queue Q; // 定义队列
InitQueue(&Q); // 初始化队列
EnQueue(&Q, T); // 根节点入队
while (!IsEmpty(Q)) { // 队列不为空时循环
BiTree node = DeQueue(&Q); // 出队一个节点
printf("%d ", node->data); // 访问节点
if (node->lchild != NULL) { // 如果左孩子不为空,入队
EnQueue(&Q, node->lchild);
}
if (node->rchild != NULL) { // 如果右孩子不为空,入队
EnQueue(&Q, node->rchild);
}
}
}
二叉树-二叉链表法
于 2023-11-30 15:48:32 首次发布