二叉树的基本操作(二)

这是对二叉树一的补充

#include <stdio.h>

#include <malloc.h>

#define MaxSize 100

#define MaxWidth 40

int LeafCount=0;

int Layer=1;

typedef char ElemType;

typedef struct tnode

{

ElemType data;

struct tnode *lchild,*rchild;

} BTNode;

void CreateBTree(BTNode * &bt) /*创建二叉链bt*/

{

BTNode * p=NULL;

char  ch;

bt=NULL;

ch=getchar(); /*先序输入序列AB.DF..G..C.E.H..*/

if (ch==‘.‘)

bt=NULL;

else

{

bt=(BTNode *)malloc(sizeof(BTNode));

bt->data=ch;

CreateBTree( bt->lchild);

CreateBTree( bt->rchild);

}

}

void PreDispBTree(BTNode *bt) /*先序输出二叉树*/

{

if (bt!=NULL)

{

printf("%c ",bt->data);

PreDispBTree(bt->lchild);
/*递归处理左子树*/

PreDispBTree(bt->rchild);
/*递归处理右子树*/

}

}

void zhongxuTree(BTNode *bt)/*编写中序输出二叉树函数*/

{

if(bt!=NULL)

{

zhongxuTree(bt->lchild);

printf("%c ",bt->data);

zhongxuTree(bt->rchild);

}

}

void houxuTree(BTNode *bt)    /*编写后序输出二叉树函数*/

{

if(bt!=NULL)

{

houxuTree(bt->lchild);

houxuTree(bt->rchild);

printf("%c ",bt->data);

}

}

void yeziTree(BTNode *bt)/*编写二叉树输出叶子节点的函数*/

{

if(bt!=NULL)

{

if(bt->lchild==NULL&&bt->rchild==NULL)

{

printf("%c ",bt->data);

}

yeziTree(bt->lchild);

yeziTree(bt->rchild);

}

}

int  leaf(BTNode *bt)/*统计叶子数*/

{

if(bt!=NULL)

{

leaf(bt->lchild);

leaf(bt->rchild);

if(bt->lchild==NULL&&bt->rchild==NULL)

LeafCount++;

}

return LeafCount;

}

int shenduTree(BTNode *bt)/*计算并输出二叉树的深度。*/

{

int hl,hr,max;

if(bt!=NULL)

{

hl=shenduTree(bt->lchild);

hr=shenduTree(bt->rchild);

max=hl>hr? hl:hr;

return (max+1);

}

else

return 0;

}

void PrintTree(BTNode *bt,int Layer)/*编写竖向显示二叉树(即按层显示)函数*/

{

if(bt==NULL)

return ;

PrintTree(bt->lchild,Layer+1);

for(int i=0;i<Layer;i++)

printf("  ");

printf("%c\n",bt->data);

PrintTree(bt->rchild,Layer+1);

}

void main()

{

BTNode *bt;

CreateBTree(bt);
/*构造图6.12(a)所示的二叉树*/

printf("二叉树先序序列bt:\n");

PreDispBTree(bt);

printf("\n");

printf("二叉树中序序列bt:\n");/*中序输出二叉树*/

zhongxuTree(bt);

printf("\n");

printf("二叉树后序序列bt:\n");/*后序输出二叉树*/

houxuTree(bt);

printf("\n");

printf("计算并输出二叉树的深度\n");

printf("%d\n", shenduTree(bt));

printf("输出二叉树bt叶子结点:\n");/*输出二叉树叶子结点*/

yeziTree(bt);

printf("\n");

printf("输出二叉树bt叶子结点个数:\n");/*输出二叉树叶子结点个数*/

printf("%d\n",leaf(bt));

printf("树状打印二叉树:\n");

PrintTree(bt,Layer);

printf("\n");

}

时间: 2024-10-20 15:59:57

二叉树的基本操作(二)的相关文章

打印菜单界面,用c语言实现二叉树的基本操作

打印菜单界面,用c语言实现二叉树的基本操作: 其代码原理和用c++实现一样,请看本人上篇博客:二叉树的先序.中序.后序遍历等基本操作c++实现,链接:http://yaoyaolx.blog.51cto.com/10732111/1783527 实现代码: #include <stdio.h> #include <stdlib.h> #define MAXSIZE 50 //定义二叉树的二叉链表结构 typedef struct Node { char data; struct N

&lt;二叉树的基本操作&gt;

#include<stdio.h> #include<stdlib.h> #include<string.h> #define num 100 #define OK 1 typedef int Status; typedef char DataType; typedef struct node { DataType data; struct node *lchild,*rchild; }BinTNode,*BinTree; Status CreateBiTree(Bin

《二叉树的基本操作》

1 #include<stdio.h> 2 #include<stdlib.h> 3 #include<string.h> 4 5 #define NUM 100 //二叉树的最大结点数 6 #define QueueSize 100 //队列初始容量 7 #define TRUE 1 8 #define FALSE 0 9 #define OK 1 10 #define ERROR 0 11 #define OVERFLOW -1 12 13 typedef int

&lt;二叉树的基本操作(有层次遍历)&gt;

#include<stdio.h> #include<stdlib.h> #include<string.h> #define num 100 #define OK 1 #define ERROR 0 #define OVERFLOW -1 #define FALSE 0 #define TRUE 1 typedef int Status; typedef char DataType; typedef struct node { DataType data; struc

二叉树的基本操作(含Huffman树)

大二时候写的烂代码,翻出来复习复习(o(╯□╰)o) 代码: #include <stdio.h> #include <stdlib.h> #define Max_Size 100 struct Binode{ char res; struct Binode *lchild,*rchild; }; struct Binode* First_Creat_Bitree(){//建立一棵二叉树 char ch; struct Binode *p; scanf("%c"

数据结构(复习)--------关于二叉树的基本操作

// // 关于数据结构的总结与复习 Coding //关于二叉树的建立以及层次,其他遍历(递归,非递归)求深度等基本操作 #include <cstdio> #include <cstdlib> //#define _OJ_ typedef struct tree { char data; struct tree *left; struct tree *right; } tree, *Bitree; typedef struct Stack1 { int top, base; B

三叉链表实现二叉树的基本操作

三叉链表存储表示 改进于二叉链表,增加指向父节点的指针,能更好地实现结点间的访问. 存储结构 /* 二叉树的三叉链表存储表示 */ typedef struct BiTPNode { TElemType data; struct BiTPNode *parent,*lchild,*rchild; /* 双亲.左右孩子指针 */ }BiTPNode,*BiPTree; 下面给出二叉树采用三叉链表,实现了二叉树的构造.遍历.深度.宽度.结点个数.叶子个数 以及 结点的交换.层次.祖先.双亲.左孩子.

二叉树的基本操作及应用(三)

#include <stdio.h> #include <stdlib.h> #include <malloc.h> #include <string.h> typedef char DataType; int depth=0; int h1=1; int nlayer=1; char ch2; typedef struct node { DataType data;//节点数据元素 struct node *lchild;//指向左孩子 struct no

数据结构之二叉树的基本操作

#include<stdio.h> #include<malloc.h> #include <stdlib.h> #define MaxSize 100 typedef char ElemType; typedef struct node { ElemType data;//数据类型 struct node *lchild;//指向左孩子 struct node *rchild;//指向右孩子 }BTNode; void CreateBTNode(BTNode *&am