C语言 二叉树相关
来源:互联网 发布:好玩的桌面软件 编辑:程序博客网 时间:2024/06/07 01:23
#include<stdio.h>
#include<stdlib.h>
//定义节点
typedef int data_t;
typedef struct tree_node
{
data_t data;
struct tree_node *lchild;
struct tree_node *rchild;
}btree_t;
//初始化
btree_t *init_btree(int num,int max)
{
btree_t * root;
if(num > max)
return NULL;
root = malloc(sizeof(btree_t));
root->data = num;
root->lchild = init_btree(2*num,max);
root->rchild = init_btree(2*num + 1,max);
return root;
}
//层序遍历
void level_btree(btree_t *root)
{
btree_t *queue[100] = {0};
int front,rear;
front = rear = 0;
queue[rear++] = root;
while(front < rear)
{
if(NULL != queue[front]->lchild)
queue[rear++] = queue[front]->lchild;
if(NULL != queue[front]->rchild)
queue[rear++] = queue[front]->rchild;
printf(" %d ",queue[front]->data);
front++;
}
printf(":end\n");
return;
}
//先序遍历
void DLR(btree_t *root)
{
if(NULL == root)
return;
printf(" %d ",root->data);
DLR(root->lchild);
DLR(root->rchild);
return;
}
//中序遍历
void LDR(btree_t *root)
{
if(NULL == root)
return;
LDR(root->lchild);
printf(" %d ",root->data);
LDR(root->rchild);
return;
}
//后序遍历
void LRD(btree_t *root)
{
if(NULL == root)
return;
LRD(root->lchild);
LRD(root->rchild);
return;
}
//使用队列先序遍历
void stack_dlr(btree_t *root)
{
btree_t *stack[20];
int top = -1;
printf(" stack_dlr:");
while(top != -1 || NULL != root)
{
while(NULL != root)
{
printf(" %d ",root->data);
stack[++top] = root;
root = root->lchild;
}
root = stack[top--]->rchild;
}
printf("\n");
return;
}
//使用队列中序遍历
void stack_ldr(btree_t *root)
{
btree_t *stack[20];
int top = -1;
printf("stack_ldr:");
while(top != -1 || NULL != root)
{
while(NULL != root)
{
stack[++top] = root;
root = root->lchild;
}
printf(" %d ",stack[top]->data);
root = stack[top--]->rchild;
}
printf("\n");
return;
}
//使用队列后序遍历
void stack_lrd(btree_t *root)
{
struct {
btree_t *root;
int cp;
}stack[20];
i nt top = -1;
printf("stack_lrd:");
while(NULL != root || -1 != top)
{
while(NULL != root)
{
stack[++top].root = root;
stack[top].cp = 1;
root = root->lchild;
}
if(1 == stack[top].cp)
{
root = stack[top].root->rchild;
stack[top].cp = 2;
continue;
}
printf(" %d ",stack[top--].root->data);
}
printf("\n");
return ;
}
//测试
int main(int argc, const char *argv[])
{
btree_t *root = init_btree(1,6);
level_btree(root);
LDR(root);
LRD(root);
DLR(root);
printf("\n*********前序遍历*******************\n");
stack_dlr(root);
printf("**********************************\n");
printf("\n*********中序遍历*******************\n");
stack_ldr(root);
printf("**********************************\n");
printf("\n*********后序遍历*******************\n");
stack_lrd(root);
printf("**********************************\n");
return 0;
}
#include<stdlib.h>
//定义节点
typedef int data_t;
typedef struct tree_node
{
data_t data;
struct tree_node *lchild;
struct tree_node *rchild;
}btree_t;
//初始化
btree_t *init_btree(int num,int max)
{
btree_t * root;
if(num > max)
return NULL;
root = malloc(sizeof(btree_t));
root->data = num;
root->lchild = init_btree(2*num,max);
root->rchild = init_btree(2*num + 1,max);
return root;
}
//层序遍历
void level_btree(btree_t *root)
{
btree_t *queue[100] = {0};
int front,rear;
front = rear = 0;
queue[rear++] = root;
while(front < rear)
{
if(NULL != queue[front]->lchild)
queue[rear++] = queue[front]->lchild;
if(NULL != queue[front]->rchild)
queue[rear++] = queue[front]->rchild;
printf(" %d ",queue[front]->data);
front++;
}
printf(":end\n");
return;
}
//先序遍历
void DLR(btree_t *root)
{
if(NULL == root)
return;
printf(" %d ",root->data);
DLR(root->lchild);
DLR(root->rchild);
return;
}
//中序遍历
void LDR(btree_t *root)
{
if(NULL == root)
return;
LDR(root->lchild);
printf(" %d ",root->data);
LDR(root->rchild);
return;
}
//后序遍历
void LRD(btree_t *root)
{
if(NULL == root)
return;
LRD(root->lchild);
LRD(root->rchild);
return;
}
//使用队列先序遍历
void stack_dlr(btree_t *root)
{
btree_t *stack[20];
int top = -1;
printf(" stack_dlr:");
while(top != -1 || NULL != root)
{
while(NULL != root)
{
printf(" %d ",root->data);
stack[++top] = root;
root = root->lchild;
}
root = stack[top--]->rchild;
}
printf("\n");
return;
}
//使用队列中序遍历
void stack_ldr(btree_t *root)
{
btree_t *stack[20];
int top = -1;
printf("stack_ldr:");
while(top != -1 || NULL != root)
{
while(NULL != root)
{
stack[++top] = root;
root = root->lchild;
}
printf(" %d ",stack[top]->data);
root = stack[top--]->rchild;
}
printf("\n");
return;
}
//使用队列后序遍历
void stack_lrd(btree_t *root)
{
struct {
btree_t *root;
int cp;
}stack[20];
i nt top = -1;
printf("stack_lrd:");
while(NULL != root || -1 != top)
{
while(NULL != root)
{
stack[++top].root = root;
stack[top].cp = 1;
root = root->lchild;
}
if(1 == stack[top].cp)
{
root = stack[top].root->rchild;
stack[top].cp = 2;
continue;
}
printf(" %d ",stack[top--].root->data);
}
printf("\n");
return ;
}
//测试
int main(int argc, const char *argv[])
{
btree_t *root = init_btree(1,6);
level_btree(root);
LDR(root);
LRD(root);
DLR(root);
printf("\n*********前序遍历*******************\n");
stack_dlr(root);
printf("**********************************\n");
printf("\n*********中序遍历*******************\n");
stack_ldr(root);
printf("**********************************\n");
printf("\n*********后序遍历*******************\n");
stack_lrd(root);
printf("**********************************\n");
return 0;
}
0 0
- C语言 二叉树相关
- C语言 二叉查找树相关算法
- C语言:二叉树的相关操作
- 二叉树的相关操作(C语言)
- C语言 二叉树
- c语言 二叉树
- 二叉树(C语言)
- c语言二叉树
- C语言 二叉树
- 二叉树-C语言
- 二叉树C语言
- c 语言 二叉树遍历
- C语言实现二叉树
- C语言 二叉树 递归
- C语言打印二叉树
- C语言二叉搜索树
- C语言(二叉树)
- C语言实现二叉树
- libevent学习三
- 求两个单链表的第一个交点(人搜)
- php 自制基于simple_html_dom的爬虫一只v1.0
- HTML----常用HEAD头标
- 周鸿祎对企业的深刻反思,太有借鉴意义了!
- C语言 二叉树相关
- 二维码读取与扫描
- android 帧布局实现跑马灯
- 如何修改单卡和双卡工程的默认数据连接开关
- Fireworks in Montreal
- 不注册直接使用COM组件的方法
- 杭电2014评分数组快排法和基本法
- [LeetCode]9.Palindrome Number
- javascript深入理解js闭包