#include <stdio.h>
#include<stdlib.h>
#include <string>
typedef char ElemType;
typedef struct node{ //建立树节点结构体
ElemType c;
struct node* pleft;
struct node* pright;
}Node,*pNode;
typedef struct queue //建立辅助队列结构体
{
pNode insertPos;
struct queue* pnext;
}queue,*pQue;
void buildBtree(pNode* root, pQue* head, pQue* tail, ElemType val) //层次建立二叉树
{
pNode treenew = (pNode)calloc(1, sizeof(Node)); //为新的树节点申请空间
pQue qNew = (pQue)calloc(1, sizeof(queue)); //为新的队列节点申请空间
qNew->insertPos = treenew; //新队列节点的插入点为新的树节点
treenew->c = val; //为新树的节点的赋值
if (NULL == *root) //空树
{
*root = treenew; //新的树节点为根节点
*head=qNew; //队列头指针和尾指针都指向根节点
*tail = qNew;
}
else {
(*tail)->pnext = qNew; //新节点设为尾节点
*tail = qNew;
if (NULL == (*head)->insertPos->pleft) { //左子树为空
(*head)->insertPos->pleft = treenew; //左子树为新的树节点
}
else if (NULL == (*head)->insertPos->pright) { //右子树为空
(*head)->insertPos->pright = treenew; //右子树为新的树节点
*head = (*head)->pnext; //队列头节点后移一位
}
}
}
void preOrder(pNode root) //前序遍历
{
if (root) {
putchar(root->c);
preOrder(root->pleft);
preOrder(root->pright);
}
}
void midOrder(pNode root) //中序遍历
{
if (root) {
midOrder(root->pleft);
putchar(root->c);
midOrder(root->pright);
}
}
void lastOrder(pNode root) //后序遍历
{
if (root) {
lastOrder(root->pleft);
lastOrder(root->pright);
putchar(root->c);
}
}
int main()
{
ElemType val;
pNode treeRoot = NULL;
pQue queHead = NULL, queTail = NULL;
while (scanf_s("%c", &val) != EOF)
{
if (val == '\n')
{
break;
}
buildBtree(&treeRoot, &queHead, &queTail, val);
}
preOrder(treeRoot);
printf("\n-----------------------\n");
midOrder(treeRoot);
printf("\n-----------------------\n");
lastOrder(treeRoot);
return 0;
}
层次建立二叉树
最新推荐文章于 2024-08-14 22:40:04 发布