标签:指针成员 存储结构 bin 转化 point 指针 null 模型 node
通用树结构的回顾:
另一种树结构模型:
孩子兄弟表示法的特点:
二叉树的定义:
二叉树的5种形态:
特殊的二叉树:
完全二叉树的特性:
性质1:
性质2:
性质3:
性质4:
性质5(这一条性质为完全二叉树所特有,普通二叉树不具备。):
本节目标:
设计要点:
BTreeNode 的设计与实现:
BTree 的设计与实现:
BTree ( 二叉树结构 ) 的实现架构:
重构父类TreeNode类和Tree类:
TreeNode.h
#ifndef TREENODE_H
#define TREENODE_H
#include "Object.h"
namespace StLib
{
template <typename T>
class TreeNode : public Object
{
protected:
bool m_flag;
TreeNode(const TreeNode<T>&);
TreeNode<T>& operator = (const TreeNode<T>&);
void* operator new(size_t size) throw()
{
return Object::operator new(size);
}
public:
T value;
TreeNode<T>* parent;
TreeNode()
{
m_flag = false;
parent = NULL;
}
bool flag()
{
return m_flag;
}
virtual ~TreeNode() = 0;
};
template <typename T>
TreeNode<T>::~TreeNode()
{
}
}
#endif // TREENODE_H
Tree.h
#ifndef TREE_H
#define TREE_H
#include "TreeNode.h"
#include "SharedPointer.h"
namespace StLib
{
template <typename T>
class Tree : public Object
{
protected:
TreeNode<T>* m_root;
Tree(const Tree<T>&);
Tree<T>& operator = (const Tree<T>&);
public:
Tree() { m_root = NULL; }
virtual bool insert(TreeNode<T>* node) = 0;
virtual bool insert(const T& value, TreeNode<T>* parent) = 0;
virtual SharedPointer< Tree<T> > remove(const T& value) = 0;
virtual SharedPointer< Tree<T> > remove(TreeNode<T>* node) = 0;
virtual TreeNode<T>* find(const T& value) const = 0;
virtual TreeNode<T>* find(TreeNode<T>* node) const = 0;
virtual TreeNode<T>* root() const = 0;
virtual int degree() const = 0;
virtual int count() const = 0;
virtual int height() const = 0;
virtual void clear() = 0;
};
}
#endif // TREE_H
修改对应的GTreeNode类:
GTreeNode.h
#ifndef GTREENODE_H
#define GTREENODE_H
#include "TreeNode.h"
#include "LinkList.h"
namespace StLib
{
template <typename T>
class GTreeNode : public TreeNode<T>
{
public:
LinkList<GTreeNode<T>*> child;
static GTreeNode<T>* NewNode()
{
GTreeNode<T>* ret = new GTreeNode<T>();
if( ret != NULL )
{
ret->m_flag = true;
}
return ret;
}
};
}
#endif // GTREENODE_H
在StLib中定义BTreeNode类和BTree类:
BTreeNode.h
#ifndef BTREENODE_H
#define BTREENODE_H
#include "TreeNode.h"
namespace StLib
{
template <typename T>
class BTreeNode : public TreeNode<T>
{
public:
BTreeNode<T>* left;
BTreeNode<T>* right;
BTreeNode()
{
left = NULL;
right = NULL;
}
static BTreeNode<T>* NewNode()
{
BTreeNode<T>* ret = new BTreeNode<T>();
if( ret != NULL )
{
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 StLib
{
template <typename T>
class BTree : public Tree<T>
{
public:
bool insert(TreeNode<T>* node)
{
bool ret = true;
return ret;
}
bool insert(const T& value, TreeNode<T>* parent)
{
bool ret = true;
return ret;
}
SharedPointer< Tree<T> > remove(const T& value)
{
return NULL;
}
SharedPointer< Tree<T> > remove(TreeNode<T>* node)
{
return NULL;
}
BTreeNode<T>* find(const T& value) const
{
return NULL;
}
BTreeNode<T>* find(TreeNode<T>* node) const
{
return NULL;
}
BTreeNode<T>* root() const
{
return dynamic_cast<BTreeNode<T>*>(this->m_root);
}
int degree() const
{
return NULL;
}
int count() const
{
return NULL;
}
int height() const
{
return NULL;
}
void clear()
{
this->m_root = NULL;
}
~BTree()
{
clear();
}
};
}
#endif // BTREE_H
标签:指针成员 存储结构 bin 转化 point 指针 null 模型 node
原文地址:https://www.cnblogs.com/PyLearn/p/10161680.html