二叉树叶子结点,非叶子节点以及深度的计算
二叉树叶子结点的计算
//统计叶子结点的数目
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;
}
效果图
希望本篇文章能对大家有所帮助, 真诚希望得到大家的评论和建议
二叉树叶子结点,非叶子节点以及深度的计算相关推荐
- 数据结构----二叉树叶子结点到根节点的高度计算
数据结构----二叉树叶子结点到根节点的高度计算 代码: #include<stdio.h> #include<stdlib.h> typedef struct bstTree ...
- 数据结构——从叶子结点到根节点的全部路径
问题 给定一个二叉树,返回所有从根节点到叶子节点的路径. 说明: 叶子节点是指没有子节点的节点. 示例: 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/prob ...
- 二叉树探究之非叶子结点和叶子结点对半分且最多差一个
分析第一步,二叉树根据完整性(即最后一层是否满了)可分为"完整二叉树"和"非完整二叉树"(不知道有没有这个概念,自己定义的),然后从特殊情况开始即"完 ...
- 叶子结点和分支节点_数据结构中,满二叉树,结点,叶子节点,是什么?
除最后一层无任何子节点外,每一层上的所有结点都有两个子结点二叉树. 国内教程定义:一个二叉树,如果每一个层的结点数都达到最大值,则这个二叉树就是满二叉树.也就是说,如果一个二叉树的层数为K,且结点总数 ...
- 叶子结点和分支节点_统计二叉树分支及叶子结点的个数
以二叉链表存储结构存储二叉树,统计分支结点及叶子个数. (1)从键盘输入扩展的先序结点数据,以二叉链表存储该二叉树. (2)统计叶子结点个数. (3)统计分支节点个数. (4)要求程序通过一个主菜单进 ...
- 叶子结点和分支节点_二叉树中的度是什么意思,叶子结点是什么?
展开全部 度分为三32313133353236313431303231363533e4b893e5b19e31333431366366种:树的深度:树中最大的结点层.结点的度:结点子树的个数.树的度: ...
- 叶子结点和分支节点_教你玩转二叉查找树的结点插入操作
上一篇文章已经介绍过了二叉查找树的基本概念与查找结点的操作,本文继续介绍二叉查找树插入结点的操作. 二叉查找树的插入 现有只有一个结点的二叉查找树,该结点的值为50,现在我要往这颗二叉查找树依次插入9 ...
- 叶子结点和分支节点_结点数和叶子结点数有什么区别
展开全部 结点数和叶子结点数的区别: 叶子结点是度为0的结点,简单的说就是一个二叉树任意一个分支上62616964757a686964616fe58685e5aeb931333365653931的终端 ...
- 叶子结点和分支节点_什么是叶子节点,度?根节点?
展开全部 1.叶子也就是leaf指在网络结构中某些计62616964757a686964616fe59b9ee7ad9431333366303766算机,它们从比较靠近中心的计算机处接收信号,而不把信 ...
最新文章
- 提供第三种代码生成方式——通过自定义BuildProvider为ASP.NET提供代码生成
- Re题目------Enm.exe
- Java Web学习总结-文件下载
- Mysql 中根据条件排序获取排名
- 近期工作中使用到的插件总结
- source insight怎样恢复默认界面设置
- 5.6m元多项式的表示
- mosquitto源码分析(二)
- 【转载】基于rasa的对话系统搭建(上)
- C++并发编程 (1) 基本知识
- 使用 laravel Passport 做 API 认证
- iOS正确获取时间戳的代码
- java txt转换excel_Java实现将txt文件转成xls文件的方法
- VS2015 密钥(证实有效)
- border边框属性的介绍
- Windows 10微软拼音中添加自定义短语
- Git删除提交历史记录
- Flurry使用初级教程
- winsxs探索之sxstrace错误跟踪工具
- Ubuntu添加Pycharm的快捷方式