zoukankan      html  css  js  c++  java
  • 树——通用树的存储结构与结点实现

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

  • 相关阅读:
    1028 人口普查 (20分)
    1027 打印沙漏 (20分)
    1026 程序运行时间 (15分)
    1025 反转链表 (25分)
    1024 科学计数法 (20分)
    1023 组个最小数 (20分)
    1022 D进制的A+B (20分)
    1021 个位数统计 (15分)
    1020 月饼 (25分)
    1019 数字黑洞 (20分)
  • 原文地址:https://www.cnblogs.com/dishengAndziyu/p/10924424.html
Copyright © 2011-2022 走看看