二叉树叶子结点,非叶子节点以及深度的计算

article/2025/8/26 20:57:42

二叉树叶子结点的计算

//统计叶子结点的数目
int LeafNum(BiTree T) {if (!T) {return 0;} else if (!T->lchild && !T->rchild) {return 1;} else {return LeafNum(T->lchild) + LeafNum(T->rchild);}
}

二叉树非叶子节点的计算

//统计非叶子结点的数目
int NotLeafNum(BiTree T) {if (!T) {return 0;} else if (!T->lchild && !T->rchild) {return 0;} else {return NotLeafNum(T->lchild) + NotLeafNum(T->rchild) + 1;}
}

二叉树深度的计算

//计算二叉树的深度
int BiTreeDeepth(BiTree T) {if (!T) {return 0;}return BiTreeDeepth(T->lchild) > BiTreeDeepth(T->rchild) ?1 + BiTreeDeepth(T->lchild) : 1 + BiTreeDeepth(T->rchild);
}

测试

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <windows.h>
//定义一个二叉树
typedef struct Node {char data;struct Node* lchild;struct Node* rchild;
}BitNode, *BiTree;
//创建二叉树
void CreateBiTree(BiTree* T) {char ch = 0;scanf("%c", &ch);if (ch == ' ') {*T = NULL;} else {*T = (BiTree)malloc(sizeof(BitNode));if (!(*T)) {exit(-1);}(*T)->data = ch;CreateBiTree(&((*T)->lchild));CreateBiTree(&((*T)->rchild));}
}
//遍历二叉树
void PreOrderTraverse(BiTree T) {if (T) {printf("%2c", T->data);PreOrderTraverse(T->lchild);PreOrderTraverse(T->rchild);}
}
void Destroy(BiTree* T) {if (*T) {if ((*T)->lchild) {Destroy(&((*T)->lchild));}if ((*T)->rchild) {Destroy(&((*T)->rchild));}free(*T);*T = NULL;}
}
//统计叶子结点的数目
int LeafNum(BiTree T) {if (!T) {return 0;} else if (!T->lchild && !T->rchild) {return 1;} else {return LeafNum(T->lchild) + LeafNum(T->rchild);}
}
//统计非叶子结点的数目
int NotLeafNum(BiTree T) {if (!T) {return 0;} else if (!T->lchild && !T->rchild) {return 0;} else {return NotLeafNum(T->lchild) + NotLeafNum(T->rchild) + 1;}
}
//计算二叉树的深度
int BiTreeDeepth(BiTree T) {if (!T) {return 0;}return BiTreeDeepth(T->lchild) > BiTreeDeepth(T->rchild) ?1 + BiTreeDeepth(T->lchild) : 1 + BiTreeDeepth(T->rchild);
}
int main() {BiTree t1;CreateBiTree(&t1);printf("**********************\n");PreOrderTraverse(t1);printf("\n**********************\n");printf("叶子结点的数目: %d\n", LeafNum(t1));printf("************************\n");printf("非叶子结点的数目: %d\n", NotLeafNum(t1));printf("************************\n");printf("深度: %d\n", BiTreeDeepth(t1));printf("************************\n");Destroy(&t1);if (!t1) {printf("OK\n");}system("pause");return 0;
}

效果图

在这里插入图片描述

希望本篇文章能对大家有所帮助, 真诚希望得到大家的评论和建议


http://chatgpt.dhexx.cn/article/RNU7SYXV.shtml

相关文章

叶子结点

叶子结点 叶子结点是离散数学当中的概念。一棵树当中没有子结点&#xff08;即度为0&#xff09;的结点&#xff0c;称为叶子结点&#xff0c;简称“叶子”。 叶子是指度为0的结点&#xff0c;又称为终端结点。 叶子结点 就是度为0的结点 就是没有子结点的结点 n0&#xff1a;…

Pytorch 叶子张量 leaf tensor (叶子节点) (detach)

在Pytorch中&#xff0c;默认情况下&#xff0c;非叶节点的梯度值在反向传播过程中使用完后就会被清除&#xff0c;不会被保留。只有叶节点的梯度值能够被保留下来。 对于任意一个张量来说&#xff0c;我们可以用 tensor.is_leaf 来判断它是否是叶子张量&#xff08;leaf tenso…

Pytorch学习笔记(一)——自动求导和叶子节点

一、什么是叶子节点 PyTorch中的张量tensor有一个属性是is_leaf&#xff0c;当is_leaf为True时&#xff0c;改tensor是叶子张量&#xff0c;也叫叶子节点。 二、叶子节点的作用 PyTorch有自动求导的功能&#xff0c; 当requires_gradTrue时&#xff0c;PyTorch会自动记录运算…

数据结构-树:根节点、子节点、叶子节点是什么?

前言&#xff1a;这个属于数据结构&#xff1a;树。 下面给个例子图解释&#xff08;根节点、子节点、叶子节点&#xff09;。 上图数字 1、3、7是叶子节点&#xff1b;&#xff08;因为他们下面没有分叉出子节点&#xff0c;所以称为&#xff1a;叶子节点&#xff09;【度为0】…

数据结构 - 树

树 &#xff08;1&#xff09;相关概念 兄弟节点&#xff1a;节点的父节点是同一个节点&#xff0c;所以它们之间互称为兄弟节点。 根节点&#xff1a;没有父节点的节点叫作根节点 叶子节点&#xff1a;没有子节点的节点叫作叶子节点或者叶节点。 节点的高度&#xff1a;节…

根节点、子节点、叶子节点是什么?

前言&#xff1a;这个属于数据结构&#xff1a;树。 下面给个例子图解释&#xff08;根节点、子节点、叶子节点&#xff09;。 上图数字 1、3、7是叶子节点&#xff1b;&#xff08;因为他们下面没有分叉出子节点&#xff0c;所以称为&#xff1a;叶子节点&#xff09;【度为0】…

弱网、2G、3G、4G测试

1.各项指标 教程指引&#xff1a;弱网测试教程 2.概念介绍 Bandwidth&#xff08;带宽&#xff09;、Utilistation&#xff08;利用百分比&#xff09;、Round-trip&#xff08;往返延迟&#xff09;、MTU&#xff08;最大传输单元&#xff09; 3G&#xff1a;300k-2Mbps左…

简单实用Chrome 日常开发功能详解,帮助你上班摸鱼

chrome是目前开发过程中一骑绝尘的浏览器&#xff0c;占有绝对领导地位。其强大的功能和生态圈&#xff0c;让很多开发者爱不释手。但很多的开发者使用chrome还是停留在F12打开控制台查看log、检查元素或者debug打断点阶段&#xff0c;其实chrome的强大的功能远远超过我们的想象…

小米路由器3G如何解决USB3.0 5G WiFi速度慢的问题

经常玩电脑&#xff0c;希望家里有个轻 nas&#xff0c;小米路由器是一个不错的选择&#xff0c;tbw买了一个小米路由器3G看重的是快速的速度&#xff08;usb3.0 5G Wifi&#xff09;&#xff0c;及小米的可拓展性&#xff0c;使用usb3.0的usb接口&#xff0c;且使用5gb网速&am…

浏览器通过f12来限制网速

浏览器可以使用F12开发者工具来模拟网速的快慢。 打开需要测试的网站&#xff0c;点击F12&#xff0c;再点击选项里的network-no throttling&#xff0c;展示的有几种&#xff0c;offline&#xff0c;快3g&#xff0c;慢3g&#xff0c;或者自定义 点击add可以自定义网速&#…

移动网速测试软件,网速测试大师APP

网速测试大师APP是一款专业的手机网络测试应用&#xff0c;支持一键测速&#xff0c;精准快速&#xff0c;还能全方位分析网速&#xff0c;Wifi和移动网络全检测&#xff0c;30秒测速当前网络状况&#xff0c;做随时随地的测速专家。 该软件整个测速过程精准又快速&#xff0c;…

android 显示网速,随着掌握联网状态 Android手机如何显示实时网速

很多时候手机信号栏明明显示正在联网而且图标也显示正在下载上传中&#xff0c;但就是打不开网页。实际上&#xff0c;此时可能正处于4G→3G切换状态而出现了短暂的断网。那么&#xff0c;如何才能准确掌握手机当前的联网状态呢&#xff1f; 答案很简单&#xff0c;就是通过手机…

Fiddler工具的弱网模拟2G/3G/4G

日常测试工作中&#xff0c;C端用户会因信号和设备网络原因&#xff0c;出现一些恶劣网络的状态&#xff0c;然后出现奇奇怪怪的丢包、重传、UI空白、UI绘制异常等问题&#xff0c;就需要测试人员去模拟这类弱网环境去重现用户反馈的问题&#xff0c;以方便开发同学解决和调优加…

网速测试大师的软件怎么回事,网速测试大师

手机网速测试大师是一款手机网络测试软件&#xff0c;通过手机网速测试大师你可以直接测试你手机的网络速度&#xff0c;无论是WIFI还是手机移动网络都可以检测&#xff0c;让你更加了解你的手机网络。 软件介绍 网速测试大师是一款热度仅次于Ookla Speedtest. net的网速测试工…

限制浏览器网速

需求&#xff1a;限制浏览器网速&#xff0c;拉长请求时间&#xff0c;方便验证请求loading状态是否添加成功。 ps&#xff1a;一般建议给弹窗/按钮增加loading状态&#xff0c;防止重复点击之后多次请求 解决方案&#xff1a;控制台(f12)-网络(Network) No throttling 无限制…

使用chrome进行慢网速测试

前言 在开发的时候&#xff0c;有这么一种情况&#xff0c;点击一个按钮调用一个接口生成数据&#xff0c;之后刷新页面&#xff0c;但是由于网络慢的原因&#xff0c;能够多次点击&#xff0c;但是自己的网络模拟不了很慢的情况&#xff0c;怎么办呢&#xff1f; 使用chrome…

Vue Chrome浏览器手动调节模拟网速

Chrome浏览器手动调节网速 1.首先打开chrome浏览器&#xff0c;按下键盘上的f12键&#xff0c;弹出开发者调试工具 2.点击network——>No throtting弹出选择项 3.选择需要模拟的选项就行了 Fast 3G&#xff1a;表示快的3g网速 Slow 3G&#xff1a;表示慢的3g网速 Offline…

3g显卡测试软件,3G网速测试细则

3G网速测试细则 3G网速测试细则 测试机型&#xff1a;小米手机2、小米手机2电信版、vivo X1st 测试机型 测试软件&#xff1a;speedtest 爱奇艺高清影视 测试软件 测试方法&#xff1a; ① 在同一时间段、同一地点使用Speedtest测试三台手机3G网络条件下的速度 ② 分别使用装有…

国内三大制式3G网络简介及比较

比比谁最快 随着中国电信近期3G网络试商用的开始&#xff0c;越来越多的用户开始关注国内3G网络上网速度&#xff0c;“传说”中的3G网络速度到底有多快呢&#xff1f;据最新的数据显示&#xff0c;中国电信的试商用测试信号可以达到近200KB/s的下载速度。这是怎样的一个概念&a…