二叉树的存储结构有顺序存储和链式存储两种存储方式,这里我们采用使用频率较高的链式存储方式(二叉链表)来存储二叉树.
下面给出二叉树结点的定义.
struct BiTreeNode//二叉树结点定义
{
BiTreeNode* LChild;//左孩子指针域
int data;
BiTreeNode* RChild;//右孩子指针域
};
在上面的定义中,LChild指针指向该结点的左孩子结点,RChild指针指向该结点的右孩子结点,另外data变量存储该结点的数据信息. 值得一提的是,由于二叉树的某个结点对应的后继可能有两个(而不是至多只有一个),故二叉树这种结构是非线性结构,其操作难度要明显大于线性结构(比如顺序表、单链表).
有了二叉树结点的定义,我们再来分析该如何在主存中创建一棵二叉树.
下面给出以先序遍历序列创建二叉树的具体过程.
void CreateBiTree(BiTreeNode* &T)//以先序序列创建二叉树
{
char ch;
cin>>ch;
if(ch!='#')
{
T=(BiTreeNode*)malloc(sizeof(BiTreeNode));
T->data=ch;
CreateBiTree(T->LChild);
CreateBiTree(T->RChild);
}
else
{
T=NULL;
}
}
在上述过程中,我们可以发现,当输入的字符为‘#’时, 创建空树,否则创建一个