第五十二课 树的存储结构与实现

GTree是通用树结构。

每个节点都包含了指向父节点的指针。

添加GTreeNode.h文件:

 1 #ifndef GTREENODE_H
 2 #define GTREENODE_H
 3
 4 #include "TreeNode.h"
 5 #include "LinkList.h"
 6
 7 namespace DTLib
 8 {
 9
10 template < typename T >
11 class GTreeNode : public TreeNode<T>
12 {
13 public:
14     LinkList<GTreeNode<T>*> child;
15
16 };
17
18 }
19
20 #endif // GTREENODE_H

添加GTree.h文件:

 1 #ifndef GTREE_H
 2 #define GTREE_H
 3
 4 #include "Tree.h"
 5 #include "GTreeNode.h"
 6
 7 namespace DTLib
 8 {
 9
10 template < typename T >
11 class GTree : public Tree<T>
12 {
13 public:
14     bool insert(TreeNode<T>* node)
15     {
16         bool ret = true;
17
18         return ret;
19     }
20
21     bool insert(const T& value, TreeNode<T>* parent)
22     {
23         bool ret = true;
24
25         return ret;
26     }
27
28     //删除的节点的子节点我们还需要处理,因此要返回删除节点的指针,这样有机会对里面的元素做进一步操作
29     SharedPointer< Tree<T> > remove(const T& value)
30     {
31         return NULL;
32     }
33
34     SharedPointer< Tree<T> > remove(TreeNode<T>* node)
35     {
36         return NULL;
37     }
38
39     GTreeNode<T>* find(const T& value) const  // 返回GTreeNode,赋值兼容性
40     {
41         return NULL;
42     }
43
44     GTreeNode<T>* find(TreeNode<T>* node) const
45     {
46         return NULL;
47     }
48
49     GTreeNode<T>* root() const
50     {
51         return dynamic_cast<GTreeNode<T>*>(this->m_root);
52     }
53
54     int degree() const
55     {
56         return 0;
57     }
58     int count() const
59     {
60         return 0;
61     }
62
63     int height() const
64     {
65         return 0;
66     }
67
68     void clear()
69     {
70         this->m_root = NULL;
71     }
72
73     ~GTree()
74     {
75         clear();
76     }
77 };
78
79 }
80
81 #endif // GTREE_H

从上往下看是非线性的,从下往上看是线性的,也就是类似于链表结构,加入父节点指针后,我们就可以用一些链表的知识来处理树了。

在工程中这种方式使用很广泛。

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

时间: 2024-08-29 12:21:41

第五十二课 树的存储结构与实现的相关文章

第七十二课 图的存储结构(上)

顶点和数据元素相关联: 每个顶点关联着一个字符串,这个就是顶点的数据,这个数据关联着工程意义. 添加MatrixGraph.h文件: 1 #ifndef MATRIXGRAPH_H 2 #define MATRIXGRAPH_H 3 4 #include "Graph.h" 5 #include "Exception.h" 6 #include "DynamicArray.h" 7 8 namespace DTLib 9 { 10 // V是顶点

JAVA学习第五十二课 — IO流(六)File对象

File类 用来给文件或者文件夹封装成对象 方便对文件与文件夹的属性信息进行操作 File对象可以作为参数传递给流的构造函数 一.构造函数和分隔符 public static void FileDemo() {//构造函数演示 //可以将一个已存在或不存在的文件或目录封装成File对象 File file = new File("d:\\a.txt"); File file2 = new File("d:","a.txt"); File file

第五十二课、命令行参数的应用

一.主窗口的状态参数 1.主窗口的状态参数 (1).应用程序必须保存和恢复主窗口的状态参数(位置.大小等) 2.应用程序退出的过程 (1).收到关闭事件 (2).执行关闭事件处理函数 (3).主窗口从屏幕上消失 (4).主窗口的析构函数执行 3.一般而言 (1).应用程序在收到关闭事件时进行状态参数的保存 4.Qt中的解决方案 (1).重写关闭事件处理函数 (2).在关闭事件处理函数中保存状态参数 文本编辑器改变: AppConfig.h:增加了两个与主窗口相关的变量及相关函数,则构造函数的参数

第五十二课、c++中的抽象类和接口

一.c++中的抽象类与纯虚函数 1.面向对象中抽象的概念 (1).现实中需要知道具体图形的类型才能求面积 (2).图形类只是概念上的类型,没有具体对象 2.面向对象中的抽象类 (1).可用于表示现实世界中的抽象概念 (2).是一种只能定义类型,而不能产生对象的类 (3).只能被继承并重写相关的函数 (4).直接特征是相关函数没有完整实现 3.c++中没有抽象类的概念 (1).c++通过纯虚函数实现抽象类 (2).纯虚函数是只定义原型的成员函数 (3).一个c++类中存在纯虚函数就成了抽象类 4.

第五十二课 linux操作系统原理、虚拟机基础原理

linux操作系统原理 linux操作系统原理 虚拟机技术基础原理 虚拟机技术基础原理

【C++探索之旅】第一部分第十二课:指针一出,谁与争锋

内容简介 1.第一部分第十二课:指针一出,谁与争锋 2.第一部分第十三课预告:第一部分小测验 指针一出,谁与争锋 上一课<[C++探索之旅]第一部分第十一课:小练习,猜单词>中,我们用一个小游戏来总结了之前几课学习的知识点. 现在,终于来到第一部分的最后一个知识点了,也是C++的基础部分的最后一个讲题.之后进入第二部分,就会开始面向对象之旅.因此,这一课也注定不平凡.系好安全带吧,因为马力要加足了! 指针这个C系语言的难点(著名的C语言里也有指针),令无数英雄"尽折腰",也

QT开发(五十二)———QML语言

QT开发(五十二)---QML语言 QML是一种声明语言,用于描述程序界面.QML将用户界面分解成一块块小的元素,每一元素都由很多组件构成.QML定义了用户界面元素的外观和行为:更复杂的逻辑则可以结合JavaScript脚本实现. 一.QML基础语法 1.Import语句 QML代码中,import语句一般写在头几行,主要用途如下:     A.包含类型的全名空间     B.包含QML代码文件的目录     C.JavaScript代码文件 格式如下: import Namespace Ver

NeHe OpenGL教程 第四十二课:多重视口

转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线教程的编写,以及yarn的翻译整理表示感谢. NeHe OpenGL第四十二课:多重视口 多重视口 画中画效果,很酷吧.使用视口它变得很简单,但渲染四次可会大大降低你的显示速度哦:) 欢迎来到充满趣味的另一课.这次我将向你展示怎样在单个窗口内显示多个视口.这些视口在窗口模式下能正确的调整大小.其中有

NeHe OpenGL教程 第二十二课:凹凸映射

转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线教程的编写,以及yarn的翻译整理表示感谢. NeHe OpenGL第二十二课:凹凸映射 凹凸映射,多重纹理扩展: 这是一课高级教程,请确信你对基本知识已经非常了解了.这一课是基于第六课的代码的,它将建立一个非常酷的立体纹理效果. 这一课由Jens Schneider所写,它基本上是由第6课改写而来