第五十一课 树的定义与操作

树的定义是递归的,与树的相关算法也是递归的。

如果我们定义一个数组,这个数组中的每一个元素是一棵树,那么这个数组就构成了一个森林。

树节点里面有指向父节点的指针,对于工程实践来说非常有帮助。

添加TreeNode.h文件:

 1 #ifndef TREENODE_H
 2 #define TREENODE_H
 3
 4 #include "Object.h"
 5
 6 namespace DTLib
 7 {
 8
 9 template < typename T >
10 class TreeNode : public Object
11 {
12 public:
13     T value;
14     TreeNode<T>* parent;
15
16     TreeNode()
17     {
18         parent = NULL;
19     }
20
21     virtual ~TreeNode() = 0;
22 };
23
24 template < typename T >
25 TreeNode<T>::~TreeNode()   //提供一个空的实现,否则可能编译不过
26 {
27
28 }
29
30 }
31
32 #endif // TREENODE_H

添加Tree.h文件:

 1 #ifndef TREE_H
 2 #define TREE_H
 3
 4 #include "TreeNode.h"
 5 #include "SharedPointer.h"
 6
 7 namespace DTLib
 8 {
 9
10 template < typename T >
11 class Tree : public Object
12 {
13 protected:
14     TreeNode<T>* m_root;
15
16 public:
17     Tree()
18     {
19         m_root = NULL;
20     }
21
22     virtual bool insert(TreeNode<T>* node) = 0;
23     virtual bool insert(const T& value, TreeNode<T>* parent) = 0;
24     virtual SharedPointer< Tree<T> > remove(const T& value) = 0; //删除的节点的子节点我们还需要处理,因此要返回删除节点的指针,
25                                                                 //这样有机会对里面的元素做进一步操作
26     virtual SharedPointer< Tree<T> > remove(TreeNode<T>* node) = 0;
27     virtual TreeNode<T>* find(const T& value) const = 0;
28     virtual TreeNode<T>* find(TreeNode<T>* node) const = 0;
29     virtual TreeNode<T>* root() const = 0;
30     virtual int degree() const = 0;
31     virtual int count() const = 0;
32     virtual int height() const = 0;
33     virtual void clear() = 0;
34
35 };
36
37 }
38
39 #endif // TREE_H

小结:

原文地址:https://www.cnblogs.com/wanmeishenghuo/p/9688759.html

时间: 2024-10-09 04:48:17

第五十一课 树的定义与操作的相关文章

第五十一课 NoSQL基础概念及MongoDB应用、数据库分配概念

NoSQL基础概念及MongoDB MongoDB基础应用 MongoDB索引及复制集 数据库分片的概念及Mongodb  sharding的实现 一.NoSQL基础概念 NoSQL(Not Only SQL),是一种技术流派,非关系型数据库:适合用在大数据领域,各种nosql有各自的查询语句,这也是nosql的缺点之一. 大数据(BigDate)也称海量数据是一个模糊的概念,像Google.百度收集大量数据,分析现在.预测未来:这些数据通过某些特定的特征和算法得出某些预测的结果,这些数据为大数

第五十一课、c++对象模型分析(下)

一.继承的本质 1.在c++编译器的内部类可以理解为结构体 2.子类是由父类成员叠加子类新成员得到的 二.多态的本质 1.当类中声明一个虚函数时,编译器会在类中生成一个虚函数表 2.虚函数表是一个存储成员函数地址的数据结构 3.虚函数表是由编译器自动生成与维护的 4.virtual成员函数会被编译器放入虚函数表中 5.存虚函数时,每个对象都有一个指向虚函数表的指针 #include<iostream> using namespace std; class Demo { protected: i

JAVA学习第五十一课 — IO流(五)流的操作基本规律

转换流: InputStreamReader:字节到字符的桥梁.解码 OutputStreamWriter:字符到字节的桥梁.编码 流的基本规律 1.明确源和汇 源:InputStream.Reader 汇:OutputStream.Writer 2.明确数据是否是纯文本数据 源:如果是,Reader,否,InputStream 汇:如果是,Writer,否,OutputStream 前两点明确后院,体系也就明确了 3.明确具体的设备 源设备: 硬盘:File 键盘:System.in 内存:

2015.1.8,第五节课Android SQLite数据库的操作

// 包的划分 Activity 界面密码所在类 com.example.sqlite.activity   快速入口 数据库操作功能接口包 com.example.sqlite.dao       快速入口 实体类所在包 com.example.sqlite.domain   快速入口 工具包 com.example.sqlite.heper            快速入口 接口实现包 com.example.sqlite.operation    快速入口    测试 layout 布局  

QT开发(五十一)——QtQuick基础

QT开发(五十一)--QtQuick基础 一.QtQuick简介 QT提供了两种独立的方法创建用户界面. QtQuick模块为创建流畅.鲜活的用户界面提供了一种标记语言.QtQuick模块适合需要动画元素的界面,以及应用程序主要运行在小屏幕和多点触控的设备上的场景. QtWidgets模块针对传统桌面提供了更多的支持,和目标平台做了更多的集成,无论目标平台是MacOSX.Windows.KDE.GNome.QtWidgets是一个非常高效的基于C++的类库,包含很多常见的用户界面组件,可以非常容

第五章数据结构--树--学习小结

这两周我们主要学到了有关树和二叉树的用法,掌握了二叉树的遍历的基本操作,但是对一些具体题目来说,还是觉得有点难以上手. 树的介绍 1. 树的定义 树是一种数据结构,它是由n(n>=1)个有限节点组成一个具有把它叫做“树”是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的.它具有以下的特点: (01) 每个节点有零个或多个子节点:(02) 没有父节点的节点称为根节点:(03) 每一个非根节点有且只有一个父节点:(04) 除了根节点外,每个子节点可以分为多个不相交的子树. 2. 树的基本术

【C++探索之旅】第一部分第十一课:小游戏,猜单词

内容简介 1.第一部分第十一课:小游戏,猜单词 2.第一部分第十二课预告:指针一出,谁与争锋 小练习 上一课<[C++探索之旅]第一部分第十课:文件读写,海阔凭鱼跃>中我们学习了读写文件的知识. 第一部分的课程也快接近尾声了,下一课我们会学习很重要的指针的知识.之后,我们就进入第二部分:面向对象编程了.哈哈哈,激动不? 目前为止,我们也学了不少内容:编译基本原理,IDE,变量,函数,条件语句,循环语句,引用,数组,文件读写,等等.你应该为自己感到自豪. 俗语说得好:实践是最好的老师.我们学了那

6天通吃树结构—— 第五天 Trie树

原文:6天通吃树结构-- 第五天 Trie树 很有段时间没写此系列了,今天我们来说Trie树,Trie树的名字有很多,比如字典树,前缀树等等. 一:概念 下面我们有and,as,at,cn,com这些关键词,那么如何构建trie树呢? 从上面的图中,我们或多或少的可以发现一些好玩的特性. 第一:根节点不包含字符,除根节点外的每一个子节点都包含一个字符. 第二:从根节点到某一节点,路径上经过的字符连接起来,就是该节点对应的字符串. 第三:每个单词的公共前缀作为一个字符节点保存. 二:使用范围 既然

菜鸟nginx源码剖析数据结构篇(五) 基数树 ngx_radix_tree_t[转]

菜鸟nginx源码剖析数据结构篇(五) 基数树 ngx_radix_tree_t Author:Echo Chen(陈斌) Email:[email protected] Blog:Blog.csdn.net/chen19870707 Date:October 28h, 2014 1.什么是基数树 基数树(radix tree)是一种不怎么常见的数据结构,这里简单的做一下介绍:在计算机科学中,基数树,是一种基于trie(字典树)的特殊的数据结构,可以快速定位叶子结点.radix tree是一种多