C++数据结构:二叉树(一)——先序建立二叉树
来源:互联网 发布:百利进销存软件网络版 编辑:程序博客网 时间:2024/06/16 21:03
一、二叉树 (Binary Tree)
定义: 二叉树是n个节点的有限集合,该集合或者为空集( 称为空二叉树 ),或者由一个根节点和两棵互不相交的的二叉树组成,这两棵二叉树分别称为根节点的左子树和右子树。
本次二叉树知识体系的总结秉承的思想是:我们希望 二叉树类BiTree,它的私有成员能体现二叉树本身的性质,它的公有成员能提供给用户一系列对二叉树的操作方法。
二、先序创建二叉树
BiTree.h 头文件定义如下:
typedef char Item; //树中数据类型typedef struct node //每个节点包含一个数据,一个左指针,一个右指针{ Item data; //节点中数据 struct node *lchild; //指向当前节点的左孩子 struct node *rchild; //指向当前节点的右孩子}BiTNode;class BiTree{private: BiTNode *root; //二叉树的根节点 int size; //二叉树的大小 int depth; //二叉树的深度public: BiTree(); //初始化二叉树构造函数 void GetBiTRoot(); //获取根节点 void GetBiTNum(); //获取二叉树节点数目 void GetBiTDepth(); //获取二叉树的深度 BiTNode* CreateBiTree(); //先序创建二叉树};
BiTree.cpp 文件定义如下:
#include "BiTree.h"#include <iostream>#include <queue>using namespace std;static int leftdepth = 0; //左深度计数器static int rightdepth = 0; //右深度计数器//函数原型//构造函数//初始化二叉树,根节点指向空,树大小为0,深度为0BiTree::BiTree(){ root = nullptr; size = 0; depth = 0;}//操作: 获取二叉树根节点数据void BiTree::GetBiTRoot(){ cout << "二叉树的根节点为:"; cout << this->root->data << endl;}//操作: 获取二叉树节点数目void BiTree::GetBiTNum(){ cout << "二叉树的节点数目为:"; cout << this->size << endl;}//操作: 获取二叉树的深度void BiTree::GetBiTDepth(){ cout << "二叉树的深度为:"; cout << this->depth << endl;}//操作: 先序建立二叉树//操作前:无参数,输入#表示为空//操作后:创建完整的树并返回树的根节点BiTNode* BiTree::CreateBiTree(){ BiTNode *ptree; //指向当前树节点的指针 if (this->root == nullptr) cout << "请输入根节点(#代表空树):"; else cout << "请输入节点(#代表空树):"; Item TreeData; //树中的数据 cin >> TreeData; //输入数据 if (TreeData == '#') //如果输入的是“#”则表示空 ptree = nullptr; else //否则不为空,申请一个空 { if (!(ptree = new BiTNode)) exit(1); ptree->data = TreeData; if(this->root == nullptr) this->root = ptree; this->size++; //节点个数+1 cout << ptree->data << "的左孩子"; if(ptree->lchild = CreateBiTree()) leftdepth++; //左深度+1 cout << ptree->data << "的右孩子"; if(ptree->rchild = CreateBiTree()) rightdepth++; //右深度+1 } this->depth = (leftdepth > rightdepth ? leftdepth : rightdepth) + 1; return ptree; //最终返回树的根节点}
UseBiTree.cpp 文件定义如下:
#include "BiTree.h"#include <iostream>using namespace std;int main(){ BiTree tree; tree.CreateBiTree(); //先序建立二叉树 tree.GetBiTRoot(); //获取二叉树的根节点数据 tree.GetBiTNum(); //获取二叉树的总节点个数 tree.GetBiTDepth(); //获取二叉树的深度 system("pause"); return EXIT_SUCCESS;}
三、运行结果
输入二叉树如下图所示
运行结果
下一篇文章将为大家介绍《二叉树的遍历》
如有不对的地方欢迎大家指正交流
阅读全文
0 0
- C++数据结构:二叉树(一)——先序建立二叉树
- 数据结构--二叉树--按给定的先序序列建立二叉链表(二叉树的存储)
- 【数据结构】【C++】二叉树的建立和先序遍历----(1)
- 先序序列建立一颗二叉树
- 数据结构练习题——先序遍历二叉树
- 先序,中序建立二叉树
- 先序递归建立二叉树
- 先序序列建立二叉树
- 二叉树之先序建立二叉树
- 根据二叉树的先序遍历建立二叉树
- 数据结构与算法之二叉树(一)-----建立二叉树以及反转二叉树
- 中序+先序 建立二叉树算法(递归)
- 二叉树的建立(先序+中序)
- (十)先序序列建立和遍历二叉树
- 数据结构练习题---先序遍历二叉树
- 数据结构练习题---先序遍历二叉树
- 【数据结构】二叉树的先序遍历
- 数据结构练习题---先序遍历二叉树
- 14.5.2.3 一致性非阻塞读
- 258. Add Digits
- android theme.appcompat.light找不到资源的错误
- Mysql查询语句使用select.. for update导致的数据库死锁分析
- 快速排序
- C++数据结构:二叉树(一)——先序建立二叉树
- angular4学习笔记(一)
- python 对象
- source insight 代码对齐
- Vue2 后台管理系统解决方案
- Redis列表
- 爬虫学习01 requests入门 response的常用方法 response.text 和response.content的区别
- 我的游戏程序员学习之路
- 学习使我快乐《二》--搭建自己的React脚手架