摘要:本文以二叉树树为例,描述树的两种存储方式——数组和链表,最后给出了二叉树的链式结构结点的详细实现。
1. 数组
1.1 普通树
二叉树中各个节点的关系:
结点编号 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
结点值 | 1 | 2 | 3 | 4 | 5 | 0 | 0 | 0 | 0 | 6 | 7 | 0 | 0 | 0 | 0 |
1.2 完全二叉树
1.3 优点与缺点
优点:方式比较简单,对于完全二叉树来说更能够根据节点之间的关系,快速存取。
缺点:对于非完全二叉树来说,会造成存储空间的大量浪费。
2. 链表
2.1 节点数据结构:
node = left_child + data + right_child
2.2 结点定义
template <typename T>
class CXTreeNode
{
protected:
friend class CXBitTree<T>;
CXTreeNode *m_lchild;
CXTreeNode *m_rchild;
public:
T m_data;
CXTreeNode(CXTreeNode *lchild=NULL, CXTreeNode *rchild=NULL)
:m_rchild(rchild), m_lchild(lchild)
{}
CXTreeNode( const T& data, CXTreeNode *lchild=NULL, CXTreeNode *rchild=NULL )
{
m_data = data;
m_lchild = lchild;
m_rchild = rchild;
}
CXTreeNode* &GetLeft() const
{
return m_lchild;
}
CXTreeNode* &GetRight() const
{
return m_rchild;
}
};