#include <stdio.h>
#include <stdlib.h>
#define MaxSize 100
# 顺序存储适应于完全二叉树
typedef struct Node1 {
int value;
int isEmpty;
} BiTNode1, SBiTree[MaxSize];
void InitBiTree1(SBiTree t) {
for (int i = 0; i < MaxSize; i++) {
t[i].isEmpty = 1;
}
}
typedef struct Node {
int data;
struct Node *lchild, *rchild;
} BiTNode, *BiTree;
BiTNode * Generate(int val) {
BiTNode *p = (BiTNode *)malloc(sizeof(BiTNode));
p->data = val;
p->lchild = NULL;
p->rchild = NULL;
return p;
}
BiTree InitBiTree() {
BiTNode *root = Generate(1);
BiTNode *p2 = Generate(2);
root->lchild = p2;
BiTNode *p3 = Generate(3);
root->rchild = p3;
BiTNode *p4 = Generate(4);
p2->rchild = p4;
BiTNode *p6 = Generate(6);
p3->lchild = p6;
BiTNode *p7 = Generate(7);
p3->rchild = p7;
BiTNode *p11 = Generate(11);
p4->rchild = p11;
BiTNode *p12 = Generate(12);
p6->lchild = p12;
return root;
}
void PreOrder(BiTree t) {
if (t != NULL) {
printf("%i\n", t->data);
PreOrder(t->lchild);
PreOrder(t->rchild);
}
}
void InOrder(BiTree t) {
if (t != NULL) {
InOrder(t->lchild);
printf("%i\n", t->data);
InOrder(t->rchild);
}
}
void PostOrder(BiTree t) {
if (t != NULL) {
PostOrder(t->lchild);
PostOrder(t->rchild);
printf("%i\n", t->data);
}
}
int TreeDepth(BiTree t) {
if (t == NULL) {
return 0;
} else {
int l = TreeDepth(t->lchild);
int r = TreeDepth(t->rchild);
return l > r ? l+1 : r+1;
}
}
typedef struct QNode {
BiTNode *data;
struct QNode *next;
} LinkNode;
typedef struct {
LinkNode *front, *rear;
} LinkQueue;
void InitQueue(LinkQueue *q) {
q->front = q->rear = NULL;
}
int EnQueue(LinkQueue *q, BiTNode *e) {
LinkNode *s = (LinkNode*)malloc(sizeof(LinkNode));
if (s == NULL) return -1;
s->data = e;
s->next = NULL;
if (q->front == NULL) {
q->front = q->rear = s;
} else {
q->rear->next = s;
q->rear = s;
}
return 1;
}
int DeQueue(LinkQueue *q, BiTree *e) {
if (q->front == NULL) return -1;
LinkNode *p = q->front;
q->front = p->next;
*e = p->data;
if (q->rear == p) {
q->front = NULL;
q->rear = NULL;
}
free(p);
return 1;
}
int IsEmpty(LinkQueue q) {
if (q.front == NULL) return 1;
else return -1;
}
void LevelOrder(BiTree t) {
LinkQueue q;
InitQueue(&q);
BiTree p = NULL;
EnQueue(&q, t);
while (IsEmpty(q) == -1) {
DeQueue(&q, &p);
printf("%i\n", p->data);
if (p->lchild != NULL) {
EnQueue(&q, p->lchild);
}
if (p->rchild != NULL) {
EnQueue(&q, p->rchild);
}
}
}
int main() {
BiTree t = InitBiTree();
LevelOrder(t);
return 0;
}
二叉树
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- 树 在计算机科学中,树(英语:tree)是一种抽象数据类型或是实现这种抽象数据类型的数据结构,用来模拟具有树状结构...
- [toc] 树 二叉树 定义 : 每个结点至多拥有两棵子树(即二叉树中不存在度大于2的结点),并且,二叉树的子树有...
- 1. 树结构示意图 补充: 兄弟节点:具有相同父节点的节点互称为兄弟节点。 树的深度:从根节点开始(其深度为0)自...