树——通用树的存储结构与结点实现

1,上篇博文介绍了树的定义和相关概念定义,本节课创建树对象和树结点对象;

2,课程目标:

1,完成树和结点的存储结构设计:

1,没有树结点,就没有树,同生死;

3,设计要点:

1,GTree 为通用树结构,每个结点可以存在多个后继结点;

2,GTreeNode 能够包含任意多指向后继结点的指针;

3,实现树结构的所有操作(增,删,查,等);

1,抽象类只用包含功能函数,具体的对象才包含成员变量和实现功能函数;

4,GTreeNode 的设计与实现:

1,组合单链表类,因为要包含任意多指向结点的指针:

5,GTree 的设计与实现:

1,继承抽象树及组合使用通用结点:

6,GTree(通用树结构)的实现架构:

1,后继表示方式是指针,指针通过单链表组织;

2,包含指向父结点的指针;

7,通用树结点的创建:

  1,通用树结点 GTreeNode 的创建:

 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     static GTreeNode<T>* NewNode() // 工厂模式
17     {
18         GTreeNode<T>* ret = new GTreeNode<T>();
19         if( ret != NULL )  // 申请堆空间成功
20         {
21             ret->m_flag = true;
22         }
23
24         return ret;
25     }
26 };
27
28 }
29
30 #endif // GTREENODE_H

 2,通用树 GTree 的创建:

    1,见后续通用树相关博文;

9,每个树结点中为什么包含指向前驱结点的指针?

1,根结点 ==> 叶结点:非线性数据结构;

2,叶结点 ==> 根结点:线性数据结构(链表);

1,每个结点通过 parent 指针都能找到唯一的父结点,于是每个叶结点都能够通过 parent 指针找到唯一的根结点,这是线性的链表结构;

2,可以用树相关的知识,也可以用链表相关的知识处理树的问题;

原文地址:https://www.cnblogs.com/dishengAndziyu/p/10924424.html

时间: 2024-10-04 13:30:37

树——通用树的存储结构与结点实现的相关文章

树——通用树结点的清除

1,树是一种数据结构,用来存储容器,因此它可以用来看做一种容器类型:既可以向容器中插入东西,也可以将容器中的东西倒出来: 2,清除操作的定义: 1,void clear(): 1,将树中的所有结点清除(释放堆中的结点): 3,树中数据元素的清除: 1,递归清除: 4,清除操作功能的定义: 1,free(node) 1,清除 node 为根结点的树: 2,释放树中的每一个结点: 2,功能函数代码实现: 1 /* 清除 node 树的根结点 */ 2 void free(GTreeNode<T>*

数据结构--树(定义与存储结构)

树基本定义 树的定义 数是具有n个节点的有限集.如图即是一个树形结构. 节点分类 节点的度:一个节点拥有的子节点即成为节点的度,比如A节点,有B和C两个子节点,那么A节点的度=2. 叶节点(终端节点):没有子节点的节点,比如G.H.I.... 如图: 节点间关系 孩子节点:某一个节点的子节点称为孩子节点.比如B.C节点是A节点的孩子节点. 双亲节点:与孩子节点相反.比如,A节点是B.C的双亲节点. 兄弟节点:同一个双亲节点的孩子节点,之间称为兄弟节点.比如,B.C为兄弟节点. 如图: 树的存储结

数据结构(十七)树的定义与存储结构

一.树的定义 1.树(Tree)是n(n>=0)个结点的有限集.n=0时称为空树.在任意一棵非空树中:(1)有且仅有一个特定的称为根(Root)的结点:(2)当n>1时,其余结点可分为m(m>0)个互不相交的有限集T1.T2....Tm,其中每一个集合本身又是一棵树,并且称为根的子树(SubTree). 2.结点分类:树的结点包含一个数据元素及若干指向其子树的分支.结点拥有的子树数称为结点的度(Degree).度为0的结点称为叶结点(Leaf)或终端结点:度不为0的结点称为非终端结点或分

数据结构之树的基本运算和存储结构

树的运算: 寻找某节点 插入.删除某节点 遍历树中每个节点 先根遍历 后根遍历 层次遍历 树的存储结构: 1.双亲存储结构 typedef struct { ElemType data; int parent; }PTree[Maxsize]; 2.孩子链存储结构 typedef struct node { ElemType data; struct node *sons[MaxSons]; }TSonNode; 3.孩子兄弟链存储结构 typedef struct tnode { ElemTy

树——通用树到二叉树的转换

1,已经创建了通用树结构,有必要创建另一种树结构吗? 2,简化树就直接减少结点中孩子的数量,但是这样树还能通用吗? 3,通用树结构的回顾: 1,双亲孩子表示法: 1,每个结点都有一个指向双亲的指针: 2,每个结点都有若干个指向其孩子的指针: 4,另一种树结构模型: 1,孩子兄弟表示法: 1,每个结点都有一个指向其第一个孩子的指针: 2,每个结点都有一个指向其第一个右兄弟的指针: 1,孩子兄弟表示法可以描述普通的树型结构,因为通过根结点可以访问到这一个树形结构的每一个结点: 5,孩子兄弟表示法的特

线性表的链式存储结构(带头结点的单链表)

首先,我们定义带头节点的单链表存储结构如下: 1 /* 2 ** 线性表的单链表存储结构定义 */ 3 typedef int ListElemType;//线性表数据元素类型 4 typedef struct tagLNode { 5 ListElemType data; 6 struct tagLNode *next; 7 }LNode, *LinkList; 在此基础上可以执行的基本操作如下: 1 #include "linklist_algo.h" 2 #include <

树——通用树的层次遍历

1,为何及如何按层次遍历通用树中的每一个数据元素? 1,通用树结构是一种容器类型的树结构,其用来装数据元素,所以应该提供一种方法来遍历树中的每一个数据结构: 2,往下分析: 2,当前的事实: 1,树是非线性的数据结构,树的结点没有固定的编号方式: 1,也就不能像链表一样统一编号来访问: 3,新的需求: 1,为通用树结构提供新的方法,快速遍历每一个结点: 4,设计思路(游标): 1,在树中定义一个游标(GTreeNode<T>*): 2,遍历开始前将游标指向根结点(root()): 3,获取游标

树与二叉树之一--基本概念与存储结构

树的基本术语 结点: 结点不仅包含数据元素,而且包含指向子树的分支. 结点的度: 结点拥有的子树的个数或者分支的个数. 树的度: 树中各结点度的最大值. 叶子结点: 又叫终端结点,指度为0的结点. 非终端结点: 又叫分支结点,指度不为0的点. 子结点: 指结点的子树的根. 双亲结点: 与孩子结点的定义对应. 兄弟结点: 同一个双亲的孩子结点之间互为兄弟结点. 祖先.子孙: 从根到某结点的路径上的结点都是它的祖先,而以某结点为根的子树中的所有节点都是它的子孙. 树的高度(深度): 树中结点的最大层

Atitit 常见的树形结构 红黑树 &#160;二叉树 &#160;&#160;B树 B+树 &#160;Trie树&#160;attilax理解与总结

Atitit 常见的树形结构 红黑树  二叉树   B树 B+树  Trie树 attilax理解与总结 1.1. 树形结构-- 一对多的关系1 1.2. 树的相关术语: 1 1.3. 常见的树形结构 红黑树  二叉树   B树 B+树  Trie树2 1.4. 满二叉树和完全二叉树..完全二叉树说明深度达到完全了.2 1.5. 属的逻辑表示 树形比奥死,括号表示,文氏图,凹镜法表示3 1.6. 二叉树是数据结构中一种重要的数据结构,也是树表家族最为基础的结构.3 1.6.1. 3.2 平衡二叉