摘要:本文以二叉树树为例,描述树的两种存储方式——数组和链表,最后给出了二叉树的链式结构结点的详细实现。
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; } };