课程目标
完成二叉树和二叉树结点的存储结构设计
设计要点
- BTree 为二叉树结构,每个结点最多只有两个后继结点
- BTreeNode 只包含四个固定的公有成员(1数据、1前驱指针、2后驱指针)
- 实现树结构的所有操作(增,删,查,等)
BTreeNode 的设计与实现
template <typename T>
class BTreeNode : public TreeNode<T>
{
public:
BTreeNode<T> *left;
BTreeNode<T> *right;
// factory pattern
// ...
};
BTree 的设计与实现
template <typename T>
class BTree : public Tree<T>
{
// implementation
};
BTree (二叉树结构) 的实现架构
编程实验:二叉树结构的创建
【重构】文件:TreeNode.h
#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.h
#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
To be continued
思考:如何实现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;
}
以上内容整理于狄泰软件学院系列课程,请大家保护原创!
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。