完成二叉樹和二叉樹結點的存儲結構設計
- BTree 爲二叉樹結構,每一個結點最多隻有兩個後繼結點
- BTreeNode 只包含四個固定的公有成員(1數據、1前驅指針、2後驅指針)
- 實現樹結構的全部操做(增,刪,查,等)
template <typename T> class BTreeNode : public TreeNode<T> { public: BTreeNode<T> *left; BTreeNode<T> *right; // factory pattern // ... };
template <typename T> class BTree : public Tree<T> { // implementation };
【重構】文件:TreeNode.hnode
#ifndef TREENODE_H #define TREENODE_H #include "Object.h" namespace DTLib { template <typename T> class TreeNode : public Object { public: T value; TreeNode<T> *parent = nullptr; bool flag() { return m_flag; } virtual ~TreeNode() = 0; protected: bool m_flag = false; void *operator new (unsigned int size) noexcept(true) { return Object::operator new(size); } }; template <typename T> TreeNode<T>::~TreeNode() { } } #endif // TREENODE_H
【重構】文件: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; GTreeNode() = default; static GTreeNode<T>* NewNode() { GTreeNode<T> *ret = new GTreeNode<T>(); if (ret != nullptr) { ret->m_flag = true; } return ret; } protected: GTreeNode(const GTreeNode<T>&) = default; GTreeNode<T>& operator = (const GTreeNode<T>&) = default; }; } #endif // GTREENODE_H
文件:BTreeNode.h架構
#ifndef BTREENODE_H #define BTREENODE_H #include "TreeNode.h" namespace DTLib { template <typename T> class BTreeNode : public TreeNode<T> { public: BTreeNode<T> *left = nullptr; BTreeNode<T> *right = nullptr; static BTreeNode<T>* NewNode() { BTreeNode<T> *ret = new BTreeNode<T>(); if (ret != nullptr) { ret->m_flag = true; } return ret; } }; } #endif // BTREENODE_H
文件:BTree.hide
#ifndef BTREE_H #define BTREE_H #include "Tree.h" #include "BTreeNode.h" #include "Exception.h" #include "LinkQueue.h" namespace DTLib { template <typename T> class BTree : public Tree<T> { public: BTree() = default; 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; } BTreeNode<T>* find(const T &value) const override { return nullptr; } BTreeNode<T>* find(TreeNode<T> *node) const override { return nullptr; } BTreeNode<T>* root() const override { return nullptr; } int degree() const override { return 0; } int count() const override { return 0; } int height() const { return 0; } void clear() override { this->m_root = nullptr; } ~BTree() { clear(); } protected: BTree(const BTree<T>&) = default; BTree<T>& operator = (const BTree<T>&) = default; }; } #endif // BTREE_H
思考:如何實現BTree (二叉樹結構) 的結點查找操做
BTreeNode<T>* find(const T &value) const override { BTreeNode<T> *ret = nullptr; return ret; } BTreeNode<T>* find(TreeNode<T> *node) const override { BTreeNode<T> *ret = nullptr; return ret; }
以上內容整理於狄泰軟件學院系列課程,請你們保護原創!this