【数据结构】52_树的存储结构与实现

课程目标

完成数和节点存储结构设计

image.png

设计要点

  • GTree 为通用树结构,每一个节点能够存在多个后继节点
  • GTreeNode 可以包含任意多个指向后继节点的指针
  • 实现书结构的全部操做(增,删,查,等)

GTreeNode 设计与实现

image.png

template <typename T>
class GTreeNode : public TreeNode<T>
{
public:
    LinkList<GTreeNode<T>*> child;
};

GTree 的设计与实现

image.png

template <typename T>
class GTree : public Tree<T>
{
    // implementation
};

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

image.png

编程实验:通用树结构的建立

文件:GTreeNode.hnode

#ifndef GTREENODE_H
#define GTREENODE_H

#include "TreeNode.h"
#include "LinkList.h"

namespace DTLib
{

template <typename T>
class GTreeNode : public TreeNode<T>
{
public:
    LinkList<GTreeNode<T>*> child;
};

}

#endif // GTREENODE_H

文件:GTree.h编程

#ifndef GTREE_H
#define GTREE_H

#include "Tree.h"
#include "GTreeNode.h"

namespace DTLib
{

template <typename T>
class GTree : public Tree<T>
{
public:
    bool insert(TreeNode<T> *node) override
    {
        bool ret = true;

        return ret;
    }

    bool insert(const T &value, TreeNode<T> *parent) override
    {
        bool ret = true;

        return ret;
    }

    SharedPointer<Tree<T>> remove(const T &value) override
    {
        return nullptr;
    }

    SharedPointer<Tree<T>> remove(TreeNode<T> *node) override
    {
        return nullptr;
    }

    GTreeNode<T>* find(const T &value) const override
    {
        return nullptr;
    }

    GTreeNode<T>* find(TreeNode<T> *node) const override
    {
        return nullptr;
    }

    GTreeNode<T>* root() const override
    {
        return dynamic_cast<GTreeNode<T>*>(this->m_root);
    }

    int degree() const override
    {
        return 0;
    }

    int count() const override
    {
        return 0;
    }

    int height() const override
    {
        return 0;
    }

    void clear() override
    {
        this->m_root = nullptr;
    }

    ~GTree()
    {
        clear();
    }
};

}

#endif // GTREE_H

问题

每一个树节点中为何包含指向前驱节点的指针?数据结构

  • 根节点 → 叶节点 : 非线性数据结构哦
  • 叶节点 → 根节点 : 线性数据结构(链表)

image.png

To be continued ...

思考:如何实现 GTree (通用树结构)的节点查找?
GTreeNode<T>* find(const T &value) const override
{
    return nullptr;
}

GTreeNode<T>* find(TreeNode<T> *node) const override
{
    return nullptr;
}

以上内容整理于狄泰软件学院系列课程,请你们保护原创!架构

相关文章
相关标签/搜索