树形结构--二叉树的遍历算法应用(十九)

举报
花狗Fdog 发表于 2021/04/20 01:28:48 2021/04/20
【摘要】 文章目录 一.遍历算法应用1.输出二叉树中的结点2.输出二叉树中的叶子结点3.统计叶子结点数目4.建立二叉链表方式存储的二叉树5.求二叉树的高度6.按树状打印二叉树 一.遍历算法应用 1.输出二叉树中的结点 void PreOrder(BiTree root) { if(root != NULL) { printf("%d",root->d...

在这里插入图片描述


一.遍历算法应用

1.输出二叉树中的结点

void PreOrder(BiTree root)
{ if(root != NULL) { printf("%d",root->data); // 假设数据为int类型 PreOrder(root->RChild); // 遍历左子树 PreOrder(root->RChild); // 遍历右子树 //上例为先序遍历,中序遍历和后序遍历,只是printf()位置不同。 }
}
  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

2.输出二叉树中的叶子结点

void PreOrder(BiTree root)
{ if(root != NULL) { if(root->LChild == NULL && root->RChild == NULL) { printf("%d",root->data); } PreOrder(root->LChild); PreOrder(root->RChild); }
}
  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

3.统计叶子结点数目

int LeafCount = 0; 

void leaf(BiTree root)
{ if(root != NULL) { leaf(root->LChild); leaf(root->RChild); if(root->LChild == NULL && root->RChild == NULL) { LeafCount++; } }
}
  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

4.建立二叉链表方式存储的二叉树

void CreateBiTree(BiTree * bt)
{ char ch; ch = getchar(); if(ch == '.') { *bt = NULL; } else { *bt = (BiTree)malloc(sizeof(BiTree)); (*bt)->data = ch; CreateBiTree(&((*bt)->LChild)); CreateBiTree(&((*bt)->RChild)); }
}
  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

5.求二叉树的高度

// 先序遍历求二叉树的高度
int PostTreeDepth(BiTree bt, int h)
{ if(bt != NULL) { if(h>depth) { depth = h; } PostTreeDepth(bt->LChild,h+1); PostTreeDepth(bt->RChild,h+1); }
}


// 后序遍历求二叉树的高度
int PostTreeDepth(BiTree bt)
{ int hl,hr,max; if( bt != NULL) { hl = PostTreeDepth(bt->LChild); hr = PostTreeDepth(bt->RChild); max = hl>hr?hl:hr; return max+1; } else return 0;
}
  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27

6.按树状打印二叉树

void PrintfTree(BiTree bt,int nLayer)
{
if(bt == NULL)return ;
PrintfTree(bt->RChild,nLayer+1);
for(int i = 0;i<nLayer;i++)
{ printf(" ");
}
printf("%c\n",bt->data);
PrintfTree(bt->LChild,nLayer+1);
}
  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

若有错误,欢迎指正批评,欢迎评论。
每文一句:欲戴王冠,必承其重。哪有什么好命天赐,不都是一路披荆斩棘才换来的。

文章来源: blog.csdn.net,作者:花狗Fdog,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/Fdog_/article/details/105009469

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。