方法:将二叉树每个结点的空指针引出一个虚结点,其值为一特定制,比如“#”。我们称这种处理后的二叉树为元二叉树的扩展二叉树。这样的扩展二叉树就可以一个遍历序列确定一棵二叉树了。
/*按前序输入二叉树中结点的值*/
void creatBiTree(BiTree *T) /*这里BiTree本身就是一个指针,指针的指针*/
/*在函数中T的值会改变,所以把指针的指针当作形参*/
{
char ch;
scanf("%c",&ch);
if(ch == '#')
*T = NULL; /*所以在此代码里要注意T是指针的指针*/
else
{
*T = (BiTree)malloc(sizeof(BiTNode));
if(!*T)
return;
(*T)->data = ch;
creatBiTree(&(*T)->lchild);
creatBiTree(&(*T)->rchild);
}
}
在此代码里是前序序列创建二叉树。也可以用中序和后序序列。建立二叉树,也是利用了递归的原理。只不过在原来应该打印结点的地方,改成了生成结点,给结点赋值的操作而已。将后序遍历和中序遍历理解,那么利用中序和后序序列创建二叉树就易如反掌了。