C语言数据结构二叉树简单应用
在计算机科学中,二叉树是每个节点最多有两个子树的树结构。本文是百分网小编搜索整理的关于C语言数据结构二叉树简单应用的相关资料,供参考学习,希望对大家有所帮助!想了解更多相关信息请持续关注我们应届毕业生考试网!
通常子树被称作“左子树”(left subtree)和“右子树”(right subtree),接下来我就在这里给大家介绍一下二叉树在算法中的简单使用:
我们要完成总共有
(1)二叉树的创建
(2)二叉树的先中后序递归遍历
(3)统计叶子结点的总数
(4)求树的高度
(5)反转二叉树
(6)输出每个叶子结点到根节点的路径
(7)输出根结点到每个叶子结点的路径。
定义二叉树结点类型的结构体
typedef struct node{
char data;
struct node *Lchild;
struct node *Rchild;
}BiTNode,*BiTree;
int cnt=0;/pic/p>
二叉树的创建
BiTNode *Create(){ /pic/p>
char ch;
BiTNode *s;
ch=getchar();
if(ch=='#')erchashu
return NULL;
s=(BiTNode *)malloc(sizeof(BiTNode));
s->data=ch;
s->Lchild=Create();
s->Rchild=Create();
return s;
}
二叉树的先序、中序、后序递归遍历
void PreOrder(BiTree root){ /pic/p>
if(root){
printf("%c ",root->data);
PreOrder(root->Lchild);
PreOrder(root->Rchild);
}
}
void InOrder(BiTree root){ /pic/p>
if(root){
InOrder(root->Lchild);
printf("%c ",root->data);
InOrder(root->Rchild);
}
}
void PostOrder(BiTree root){ /pic/p>
if(root){
PostOrder(root->Lchild);
PostOrder(root->Rchild);
printf("%c ",root->data);
}
}
统计叶子结点个数:
void LeafCountNode(BiTree root){ /pic/p>
if(root){
if(!root->Lchild && !root->Rchild)
cnt++;
LeafCountNode(root->Lchild);
LeafCountNode(root->Rchild);
}
}
输出各个叶子结点值:
void IInOrder(BiTree root){ /pic/p>
if(root){
IInOrder(root->Lchild);
if(!root->Lchild && !root->Rchild)
printf("%c ",root->data);
IInOrder(root->Rchild);
}
}
求树的高度:
int PostTreeDepth(BiTree root){ /pic/p>
int h1,h2,h;
if(root==NULL){
return 0;
}
else{
h1=PostTreeDepth(root->Lchild);
h2=PostTreeDepth(root->Rchild);
h=(h1>h2?h1:h2)+1;
return h;
}
}
反转二叉树:
void MirrorTree(BiTree root){ /pic/p>
BiTree t;
if(root==NULL)
return;
else{
t=root->Lchild;
root->Lchild=root->Rchild;
root->Rchild=t;
MirrorTree(root->Lchild);
MirrorTree(root->Rchild);
}
}
输出每个叶子结点到根节点的路径:
void OutPutPath(BiTree root,char path[],int len){ /pic/p>
if(root){
if(!root->Lchild && !root->Rchild){
printf("%c ",root->data);
for(int i=len-1;i>=0;i--)
printf("%c ",path[i]);
printf("\n");
}
path[len]=root->data;
OutPutPath(root->Lchild,path,len+1);
OutPutPath(root->Rchild,path,len+1);
}
}
输出根到每个叶子结点的路径:
void PrintPath(BiTree root,char path[],int l){ /pic/p>
int len=l-1;
if(root){
if(root->Lchild==NULL && root->Rchild==NULL){
path[len]=root->data;
for(int i=9;i>=len;i--)
printf("%c ",path[i]);
printf("\n");
}
path[len]=root->data;
PrintPath(root->Lchild,path,len);
PrintPath(root->Rchild,path,len);
}
}
测试代码:
int main(void){
int h,len;
char path[20];
BiTree root;
root=Create();
/pic/p>
/pic/p>
/pic/p>
/pic/p>
/pic/p>
/pic/p>
/pic/p>
/pic/p>
/pic/p>
h=PostTreeDepth(root);
printf("树的高度为:High=%d\n",h);
/pic/p>
/pic/p>
/pic/p>
/pic/p>
/pic/p>
return 0;
}
【C语言数据结构二叉树简单应用】相关文章:
C语言的应用02-25
C语言知识总结及其简单应用03-08
C语言的应用知识09-30
C语言的主要应用12-14
C语言知识点及其简单应用02-06
C语言数据结构实现链表逆序并输出10-22
C语言数据结构中栈操作实验11-02
C语言的应用有哪些02-12
C语言的reduce方法应用09-21