#include <stdio.h>
#include <malloc.h>
#include <queue>
using namespace std;
int cur;
typedef struct binarytree
{
int value;
struct binarytree *lchild;
struct binarytree *rchild;
}node;
//先序建立二叉树
node *creat(node *p, int array[], int n)
{
if (cur >= n || array[cur] == 0)
{
++ cur;
return NULL;
}
p = (node*)malloc(sizeof(node));
p->value = array[cur ++];
p->lchild = creat(p->lchild, array, n);
p->rchild = creat(p->rchild, array, n);
return p;
}
//先序遍历二叉树
void preorder(node *p)
{
if (p)
{
printf("%4d", p->value);
preorder(p->lchild);
preorder(p->rchild);
}
return;
}
//中序遍历二叉树
void inorder(node *p)
{
if (p)
{
inorder(p->lchild);
printf("%4d", p->value);
inorder(p->rchild);
}
return;
}
//后序遍历二叉树
void postorder(node *p)
{
if (p)
{
postorder(p->lchild);
postorder(p->rchild);
printf("%4d", p->value);
}
return;
}
//层次遍历二叉树
void level(node *p)
{
queue<node*> Q;
if (NULL == p)
return;
Q.push(p);
while (!Q.empty())
{
p = Q.front();
Q.pop();
printf("%4d", p->value);
if (p->lchild)
Q.push(p->lchild);
if (p->rchild)
Q.push(p->rchild);
}
return;
}
int main()
{
int array[30] = {1, 2, 4, 0, 7, 0, 0, 5, 8, 0, 0, 9, 0, 0, 3, 0, 6, 0, 10, 0, 0};
int n = 22;
node *head = NULL;
cur = 0;
head = creat(head, array, n);
preorder(head);
printf("\n");
inorder(head);
printf("\n");
postorder(head);
printf("\n");
level(head);
printf("\n");
return 0;
}
二叉树的基本操作
最新推荐文章于 2022-05-23 23:15:16 发布