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

Posted dishengandziyu

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了树——通用树的存储结构与结点实现相关的知识,希望对你有一定的参考价值。

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,可以用树相关的知识,也可以用链表相关的知识处理树的问题;

以上是关于树——通用树的存储结构与结点实现的主要内容,如果未能解决你的问题,请参考以下文章

数据结构—树

算法与数据结构二叉树的顺序存储代码

二叉树的定义

数据结构(二十一)二叉树遍历算法的应用与二叉树的建立

数据结构开发(22):二叉树的转换深层特性与存储结构设计

数据结构-二叉树的存储结构与遍历