课程目标

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

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.h

#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;
}

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


TianSong
737 声望139 粉丝

阿里山神木的种子在3000年前已经埋下,今天不过是看到当年注定的结果,为了未来的自己,今天就埋下一颗好种子吧