一:树的存储结构
1 双亲表示法
- // 双亲表示法
- // 找双亲易,找孩子难
- template <class Type>
- class TreeNode
- {
- public:
- TreeNode(Type i=0,int pa=0):data(i),parent(pa)
- {
- }
- private:
- Type data;
- int parent;
- };
// 双亲表示法
// 找双亲易,找孩子难
template <class Type>
class TreeNode
{
public:
TreeNode(Type i=0,int pa=0):data(i),parent(pa)
{
}
private:
Type data;
int parent;
};
2 孩子表示法
1)多重链表
2)孩子链表
- //孩子链表
- template<class Type> class HeadNode;
- template<class Type>
- class ChildNode{
- public:
- friend class HeadNode<Type>;
- private:
- int child;
- ChildNode<Type>* next;
- };
- template<class Type>
- class HeadNode{
- Type data;
- ChildNode<Type>* fchild;
- };
//孩子链表
template<class Type> class HeadNode;
template<class Type>
class ChildNode{
public:
friend class HeadNode<Type>;
private:
int child;
ChildNode<Type>* next;
};
template<class Type>
class HeadNode{
Type data;
ChildNode<Type>* fchild;
};
- //带双亲的孩子链表
- template<class Type> class HeadNode;
- template<class Type>
- class ChildNode{
- public:
- friend class HeadNode<Type>;
- private:
- int child;
- ChildNode<Type>* next;
- };
- template<class Type>
- class HeadNode{
- Type data;
- int parent; // 双亲索引
- ChildNode<Type>* fchild;
- };
//带双亲的孩子链表
template<class Type> class HeadNode;
template<class Type>
class ChildNode{
public:
friend class HeadNode<Type>;
private:
int child;
ChildNode<Type>* next;
};
template<class Type>
class HeadNode{
Type data;
int parent; // 双亲索引
ChildNode<Type>* fchild;
};
3 孩子兄弟表示法(二叉树表示法)
//孩子兄弟(二叉树表示法)
template<class Type>
class Node{
Type data;
Node<Type>*pFChild,*pSibling;
};
二: 二叉树的存储结构
1:顺序存储
2 链式存储
1)二叉链表
//二叉链表
template<class Type>
class BTreeNode{
Type data;
BTreeNode<Type>*lChild,*rChild;
};
2)三叉链表
//三叉链表
template<class Type>
class BTreeNode{
Type data;
BTreeNode<Type>*lChild,*rChild,*parent;
};
后继:树与二叉树的转换