【數據結構】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;
}

以上內容整理於狄泰軟件學院系列課程,請你們保護原創!架構

相關文章
相關標籤/搜索