C语言实现二叉树
2016-07-12 18:15
183 查看
# include <stdio.h> # include <stdlib.h> # include <malloc.h> struct NODE { char ch; struct NODE *lchild; struct NODE *rchild; }; struct NODE *CreateTree(void); bool is_empty(struct NODE *p); int depth(struct NODE *p); bool traverse(struct NODE *p); bool destory(struct NODE *p); void visit(char ch); int main() { struct NODE *root = CreateTree(); if ( is_empty(root) ) printf("是空树\n"); else printf("不是空树\n"); int depths = depth(root); printf("depth is %d\n", depths); traverse(root); destory(root); return 0; } /* 功能:先序创建二叉树 返回:创建的节点地址 */ struct NODE *CreateTree(void) { char ch; struct NODE *p = NULL; scanf("%c", &ch); if (' ' == ch) { return p; } else { p = (struct NODE *)malloc(sizeof(struct NODE)); p->ch = ch; p->lchild = CreateTree(); p->rchild = CreateTree(); return p; } } /* 功能:判断该二叉树是否为空 返回:true 空; false 非空 */ bool is_empty(struct NODE *p) { if (p == NULL) return true; else return false; } /* 功能:求二叉树的深度 */ int depth(struct NODE *p) { int l; //左子树的深度 int r; //右子树的深度 if (p == NULL) { return 0; } if ( p->lchild ) { l = depth(p->lchild); } else { l = 0; } if ( p->rchild ) { r = depth(p->rchild); } else { r = 0; } return (l>r) ? (l+1) : (r+1); } /* 功能:先序遍历二叉树 */ bool traverse(struct NODE *p) { if (!p) return true; traverse(p->lchild); traverse(p->rchild); visit(p->ch); return true; } /* 功能: 销毁二叉树 */ bool destory(struct NODE *p) { if (p) { if (p->lchild) { destory(p->lchild); } if (p->rchild) { destory(p->rchild); } free(p); p = NULL; } return true; } void visit(char ch) { printf("%c ", ch); }
#include <stdio.h>
void create_btree(int list[], int bt[], int n) /*n表示list数组中元素的个数*/
{
int i, order;
bt[1] = list[0];
for(i = 1; i < n; i++)
{
order = 1; /*每次进来从根结点开始比较*/
while(bt[order] != 0)
{
if(list[i] < bt[order])
order *= 2;
else
order = order*2 + 1;
}
bt[order] = list[i];
}
}
int main()
{
int list[7] = {30, 18, 16, 25, 34, 7, 31};
int bt[16] = {0};
int i;
create_btree(list, bt, 7);
for(i = 0; i < 16; i++) /*按层输出*/
if(bt[i] != 0)
printf("%4d", bt[i]);
printf("\n");
return 0;
}
相关文章推荐
- C/C++语言字符串操作总结
- C#中如何使用VC++创建的dll动态链接库的返回参数
- C++ 在继承中使用virtual
- C语言实现二叉树的DFS
- 《C++标准库》
- C++ 模板类友元之输出流操作符重载
- c/c++ 函数中局部变量的返回
- 图形算法基础之向量
- 关于C/C++发送到打印机的一些问题处理
- c++ **p的意思是什么呢?大家真正了解**p吗
- 设计模式C++实现(16)——状态模式
- 李洪强iOS开之【零基础学习iOS开发】【02-C语言】04-常量、变量
- 设计模式C++实现(15)——观察者模式
- 设计模式C++实现(14)——职责链模式
- C语言入门(二十五)文件操作
- 设计模式C++实现(13)——中介者模式
- 设计模式C++实现(12)——备忘录模式
- 设计模式C++实现(11)——装饰模式
- c++运算符重载
- 设计模式C++实现(10)——桥接模式