二叉树叶子结点的计算

//统计叶子结点的数目
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;
}

效果图

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

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

  1. 数据结构----二叉树叶子结点到根节点的高度计算

    数据结构----二叉树叶子结点到根节点的高度计算 代码: #include<stdio.h> #include<stdlib.h> typedef struct bstTree ...

  2. 数据结构——从叶子结点到根节点的全部路径

    问题 给定一个二叉树,返回所有从根节点到叶子节点的路径. 说明: 叶子节点是指没有子节点的节点. 示例: 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/prob ...

  3. 二叉树探究之非叶子结点和叶子结点对半分且最多差一个

    分析第一步,二叉树根据完整性(即最后一层是否满了)可分为"完整二叉树"和"非完整二叉树"(不知道有没有这个概念,自己定义的),然后从特殊情况开始即"完 ...

  4. 叶子结点和分支节点_数据结构中,满二叉树,结点,叶子节点,是什么?

    除最后一层无任何子节点外,每一层上的所有结点都有两个子结点二叉树. 国内教程定义:一个二叉树,如果每一个层的结点数都达到最大值,则这个二叉树就是满二叉树.也就是说,如果一个二叉树的层数为K,且结点总数 ...

  5. 叶子结点和分支节点_统计二叉树分支及叶子结点的个数

    以二叉链表存储结构存储二叉树,统计分支结点及叶子个数. (1)从键盘输入扩展的先序结点数据,以二叉链表存储该二叉树. (2)统计叶子结点个数. (3)统计分支节点个数. (4)要求程序通过一个主菜单进 ...

  6. 叶子结点和分支节点_二叉树中的度是什么意思,叶子结点是什么?

    展开全部 度分为三32313133353236313431303231363533e4b893e5b19e31333431366366种:树的深度:树中最大的结点层.结点的度:结点子树的个数.树的度: ...

  7. 叶子结点和分支节点_教你玩转二叉查找树的结点插入操作

    上一篇文章已经介绍过了二叉查找树的基本概念与查找结点的操作,本文继续介绍二叉查找树插入结点的操作. 二叉查找树的插入 现有只有一个结点的二叉查找树,该结点的值为50,现在我要往这颗二叉查找树依次插入9 ...

  8. 叶子结点和分支节点_结点数和叶子结点数有什么区别

    展开全部 结点数和叶子结点数的区别: 叶子结点是度为0的结点,简单的说就是一个二叉树任意一个分支上62616964757a686964616fe58685e5aeb931333365653931的终端 ...

  9. 叶子结点和分支节点_什么是叶子节点,度?根节点?

    展开全部 1.叶子也就是leaf指在网络结构中某些计62616964757a686964616fe59b9ee7ad9431333366303766算机,它们从比较靠近中心的计算机处接收信号,而不把信 ...

最新文章

  1. 提供第三种代码生成方式——通过自定义BuildProvider为ASP.NET提供代码生成
  2. Re题目------Enm.exe
  3. Java Web学习总结-文件下载
  4. Mysql 中根据条件排序获取排名
  5. 近期工作中使用到的插件总结
  6. source insight怎样恢复默认界面设置
  7. 5.6m元多项式的表示
  8. mosquitto源码分析(二)
  9. 【转载】基于rasa的对话系统搭建(上)
  10. C++并发编程 (1) 基本知识
  11. 使用 laravel Passport 做 API 认证
  12. iOS正确获取时间戳的代码
  13. java txt转换excel_Java实现将txt文件转成xls文件的方法
  14. VS2015 密钥(证实有效)
  15. border边框属性的介绍
  16. Windows 10微软拼音中添加自定义短语
  17. Git删除提交历史记录
  18. Flurry使用初级教程
  19. winsxs探索之sxstrace错误跟踪工具
  20. Ubuntu添加Pycharm的快捷方式

热门文章

  1. Cadence Orcad Capture新建原理图Symbol及新建和添加元件库到工程的方法图文教程及视频演示
  2. Apollo星火计划学习笔记第四讲2——高精地图定位模块
  3. AS3加载外部swf资源库中的元件(MovieClip)
  4. L1、L2、smooth L1三类损失函数
  5. TQ2440 学习笔记—— 3、如何在ubuntu 9.10 下安装vmware-tools?
  6. Matlab如何调整坐标轴刻度
  7. 如何表示Unicode的字符?
  8. BlazeDS是什么?
  9. JS--实现漂浮广告
  10. 怎么取名都不队-DevOps