您的位置:首页 > 编程语言 > C语言/C++

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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: