C++中关于树的一些定义

  • 概念
    • 树的叶子节点
    • 节点的度
    • 分支结点
    • 树的度
    • 树的高度
    • 树的深度
    • 二叉树
      • 二叉树的特点
    • 满二叉树
    • 完全二叉树
    • 二叉查找树
  • 示例
    • 代码实现
      • 开发环境
      • 运行结果

概念

本文以一个简单的树为例,如下图,来记录树的一些概念。
在这里插入图片描述

一种由n个节点组成的具有一定层次关系的有限数据集合。每个节点有0个或者n个子节点,有一个根节点(没有前驱只有后继),除根节点外每一个节点都有一个前驱,0个或多个后继。

树的叶子节点

只有一个前驱,没有后继的节点,为最外层的节点。叶子节点的度为0。

节点的度

节点拥有的子树的数目。

分支结点

度不为0的结点。

树的度

树中结点的最大的度。

树的高度

任意叶子节点距离根节点的最大深度。此文中树的叶子节点为D、E、H,距离根节点的深度都为4,故高度为4。

树的深度

即从根节点到叶子节点的行数。此文中树的深度为4。

二叉树

二叉树是每个节点最多有两个子树的树结构。
它有五种基本形态:
二叉树可以是空集;
根可以有空的左子树或右子树;
或者左、右子树皆为空。

二叉树的特点

二叉树第i层上的结点数目最多为2i-1(i>=1)
深度为k的二叉树至多有2k-1个结点(k>=1)
包含n个结点的二叉树的高度至少为(log2n)+1

满二叉树

高度为h,并且由2h-1个节点组成的二叉树。

完全二叉树

一棵二叉树中,只有最下面两层节点的度可以小于2,并且最下层的叶节点集中在靠左的若干位置上,这样的二叉树称为完全二叉树。

二叉查找树

二叉查找树又被称为二叉搜索树。设x为二叉查找树中的一个结点,x结点包含关键字key,结点x的key值计为key[x]。如果y是x的左子树中的一个结点,则key[y]<=key[x];如果y是x的右子树的一个结点,则key[y]>=key[x]。
特点:
1.若任意结点的左子树不空,则左子树上所有结点的值均小于它的根结点的值。
2.任意结点的右子树不空,则右子树上所有结点的值均大于它的根结点的值。
3.任意结点的左、右子树也分别为二叉查找树。
4.没有键值相等的结点。

示例

下面直接上代码,一个简单的树的创建、遍历输出,叶子节点数,高度。

代码实现

Tree.h

#pragma oncetypedef struct MYTREE {char data;struct MYTREE* lChild;struct MYTREE* rChild;
}MyTree;class Tree
{
public:Tree();~Tree();void CreateTree();void TraverseTree(MyTree *root);void GetLeafNode(MyTree *root,int &num);int GetTreeDepth(MyTree *root);void GetTreeNode(MyTree *root, int &num);
};

Tree.cpp

#include "Tree.h"
#include <iostream>
#include<algorithm>//max,min
using namespace std;Tree::Tree()
{}Tree::~Tree()
{}void Tree::CreateTree()
{MyTree t1 = {'A',nullptr,nullptr};MyTree t2 = { 'B',nullptr,nullptr };MyTree t3 = { 'C',nullptr,nullptr };MyTree t4 = { 'D',nullptr,nullptr };MyTree t5 = { 'E',nullptr,nullptr };MyTree t6 = { 'F',nullptr,nullptr };MyTree t7 = { 'G',nullptr,nullptr };MyTree t8 = { 'H',nullptr,nullptr };t1.lChild = &t2;t1.rChild = &t6;t2.rChild = &t3;t3.lChild = &t4;t3.rChild = &t5;t6.rChild = &t7;t7.lChild = &t8;TraverseTree(&t1);cout << endl;int leafNum = 0;GetLeafNode(&t1,leafNum);cout << "leaf num: " << leafNum << endl;int treeDepth = GetTreeDepth(&t1);cout << "depth:" << treeDepth << endl;int nodeNum = 0;GetTreeNode(&t1,nodeNum);cout << "node num; " << nodeNum << endl;
}void Tree::TraverseTree(MyTree *root)
{if (root == nullptr){return;}TraverseTree(root->lChild);cout << root->data;TraverseTree(root->rChild);}void Tree::GetLeafNode(MyTree *root,int &num)
{if (root == nullptr){return ;}if (root->lChild == nullptr && root->rChild == nullptr){num++;}GetLeafNode(root->lChild,num);GetLeafNode(root->rChild,num);
}int Tree::GetTreeDepth(MyTree * root)
{int num = 0;if (root == nullptr){return num;}int lNum = GetTreeDepth(root->lChild);int rNum = GetTreeDepth(root->rChild);return max(lNum,rNum)+1;
}void Tree::GetTreeNode(MyTree * root, int & num)
{if (root == nullptr){return;}++num;GetTreeNode(root->lChild,num);GetTreeNode(root->rChild,num);
}

main.cpp

#include <iostream>
#include "Tree.h"
using namespace std;void test() {Tree t;t.CreateTree();
}int main()
{test();return 0;
}

开发环境

vs2017控制台输出程序。

运行结果

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/523642.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

02_Spring Cloud Alibaba整合通用Mapper+Lombok+Mysql

Spring CLoud 整合通用MapperLombokMysql 文章目录一、使用Spring Initializr快速创建Spring Boot应用二、相关依赖2.1. 添加依赖2.2. mybatis添加插件2.3. 在resources目录下面创建generator目录存放generatorConfig.xml2.3.1. config.properties配置文件2.3.2. lombok插件2.3…

如何快速深入理解监控知识? | 技术干货

戳蓝字“CSDN云计算”关注我们哦&#xff01;技术头条&#xff1a;干货、简洁、多维全面。更多云计算精华知识尽在眼前&#xff0c;get要点、solve难题&#xff0c;统统不在话下&#xff01;作者&#xff1a;叶左左链接&#xff1a;https://www.jianshu.com/p/5d76d31b39580 监…

bootstrap 模态框无法使用_模态窗 Modal Window - 产品中的??注意力设计

本文是「经典交互模式」系列第二篇&#xff0c;前文回顾&#xff1a;面包屑导航 Breadcrumbs Trail全文目录什么是模态窗 模态窗的使用问题 模态框应用实践 什么是模态窗 Modal Window我们在各种不同的屏幕应用中见过「模态窗」&#xff0c;全屏幕模态窗、弹出信息框、&#xf…

QQmlApplicationEngine failed to load component qrc:/main.qml:-1 No such file or directory

记录qml运行时出现的问题问题描述解决办法问题描述 qml项目编译的时候通过&#xff0c;但是在运行时出现图中所示错误提示。 解决办法 在项目所在的文件夹下删除编译生成的目录&#xff0c;我的项目编译生成目录如下图&#xff1a; 删除编译生成的文件夹后&#xff0c;项目…

服务迁移之路 | Spring Cloud向Service Mesh转变 | 技术干货

戳蓝字“CSDN云计算”关注我们哦&#xff01;技术头条&#xff1a;干货、简洁、多维全面。更多云计算精华知识尽在眼前&#xff0c;get要点、solve难题&#xff0c;统统不在话下&#xff01;作者&#xff1a; 李宁转自&#xff1a;博云技术社区Spring Cloud基于Spring Boot开发…

oracle使用关键字做表字段名_ArcGIS SQL使用

本主题将介绍 ArcGIS 中的选择表达式所用的常规查询的各个元素。ArcGIS 中的查询表达式使用常规 SQL 语法。警告&#xff1a;SQL 语法不适用于使用字段计算器计算字段。字段在 SQL 表达式中指定字段时&#xff0c;如果该字段名可能产生岐义(比如与 SQL 保留关键字相同)&#xf…

uml类图浅录

uml类图UML中类图的绘制单个类图的绘制类图中的成员访问属性UML类图中类与类的几种关系关联代码示例解释UML类图表示多重性说明依赖代码示例解释uml类图表示继承示例代码解释UML类图表示实现示例代码解释UML类图表示聚合示例代码UML类图表示组合示例代码解释UML类图表示绘制UML…

03_SpringCloud整合Ribbon实现负载均衡

采用随机负载均衡策略&#xff0c;四线服务之间的调用 2个用户中心&#xff0c;1个内容中心&#xff0c;内容中心调用用户中心服务 package com.itmuch.contentcenter.service.impl;import com.itmuch.contentcenter.dao.content.ShareMapper; import com.itmuch.contentcent…

容器精华问答 | 我们为什么需要容器?

戳蓝字“CSDN云计算”关注我们哦&#xff01;容器技术是这两年热门的话题&#xff0c;因为容器技术给我们带来了很多方便的地方&#xff0c;节约了不少成本&#xff0c;不管是在运维还是开发上。今天&#xff0c;就让我们来看看关于容器更加有深度的问题吧。1Q&#xff1a;什么…

C++11继承构造函数在类中的使用

继承构造函数概念衍生问题使用示例注意扩展使用&#xff08;函数&#xff09;示例代码输出结果注意概念 继承构造函数在C11特性中随之提及&#xff0c;其大概可以理解为&#xff1a; 解决了派生类无法直接使用基类中的构造函数的这一问题。 正常情况下&#xff0c;基类定义了自…

grep从文件末尾开始找_新人自学前端到什么程度才能找工作?

这个问题打我记事起到现在&#xff0c;问过我的人&#xff0c;没有1000也有800了。足以见得这个问题是多么的不得人心。自学前端开发&#xff0c;不管他在网上百度了多少资料&#xff0c;看了多少教程&#xff0c;你总得先做个网页出来。所以&#xff0c;很多人都是从html标签开…

Spring Tool Suite 4安装Lombok

Lombok官网&#xff1a;https://www.projectlombok.org/download 文章目录一、下载jar包二、lombok.jar复制三、运行lombok.jar四、安装lombok4.1 点击确定4.2 找到SpringToolSuite4.exe五、以管理员运行Spring Tool Suite 4六、引入lombok依赖6.1 maven项目6.2 普通web项目七、…

base昆明,腾讯云在合作伙伴的阵营中@了TA

戳蓝字“CSDN云计算”关注我们哦&#xff01;技术头条&#xff1a;干货、简洁、多维全面。更多云计算精华知识尽在眼前&#xff0c;get要点、solve难题&#xff0c;统统不在话下&#xff01;在今年的腾讯“三合一”大会上&#xff0c;阿晶得到了这样一则数据&#xff1a;截至目…

IntelliJ IDEA 2019 安装lombok

文章目录一、安装插件二、添加lombok依赖三、重启IntelliJ IDEA四、效果图五、如果不生效一、安装插件 二、添加lombok依赖 <!--Lombok--><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version&g…

记录C++类中的一次函数调用

引用 之前遇到一次函数调用结果的问题&#xff0c;今天在这里做一下记录。 一个基类&#xff0c;一个派生类&#xff0c;两个类中都有一个函数名相同&#xff0c;参数相同&#xff0c;参数不同的函数&#xff0c;创建基类指针指向派生类对象&#xff0c;调用相应的函数&#x…

bootstrap table移动端_bootstrap介绍

简介bootstrap是一款前端开发自适应页面的js库&#xff0c;可以让你在开发网页的时候轻松实现网站的PC与移动端兼容&#xff0c;避免在移动端上面出现样式错位等。原理bootstrap的原理是媒体查询CSS3的media&#xff0c;用于检测屏幕&#xff0c;从而改变样式的百分比。结构boo…

Spring Tool Suite 4 自动提示功能

文章目录一、java文件 自动提示二、JavaScript文件 自动提示三、HTML文件 自动提示四、导出配置文件五、编辑导出的配置文件5.1 java提示规则替换5.2 html提示规则替换六、导入配置好的文件一、java文件 自动提示 打开STS→Windows→Preferences→Java→Editor→Content Assis…

中立安全、赋能产业,UCloud优刻得凭差异化路线进军产业互联

2019年5月28日&#xff0c; 国内领先的中立云计算服务商UCloud优刻得&#xff08;以下简称UCloud&#xff09;在北京召开以“中立安全、赋能产业”为主题的UCloud用户大会暨Think in Cloud北京大会。面对走向纵深的产业互联网&#xff0c;UCloud强调做“不和用户竞争的云”&…

Spring Tool Suite 4 添加反编译插件

文章目录一、进入商店市场二、查找插件&#xff0c;输入jad搜索三、点击安装四、接收协议、安装五、重启Spring Tool Suite 4六、效果图一、进入商店市场 二、查找插件&#xff0c;输入jad搜索 三、点击安装 四、接收协议、安装 五、重启Spring Tool Suite 4 六、效果图

Hadoop精华问答 | NameNode是什么?

戳蓝字“CSDN云计算”关注我们哦&#xff01;2006年项目成立的一开始,“Hadoop”这个单词只代表了两个组件——HDFS和MapReduce。到现在的13个年头,这个单词代表的是“核心”&#xff0c;今天我们就来看看关于Hadoop的精华问答。1Q&#xff1a;NameNode是什么&#xff1f;A&…