首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

构造二叉树的有关问题

2012-02-23 
构造二叉树的问题在构造前序遍历的二叉树时constchar*CreateBiTree(BiTree&T,constchar*s){if(*s’#’){T

构造二叉树的问题
在构造前序遍历的二叉树时
const   char   *CreateBiTree(BiTree   &T,   const   char   *s)
{
if   (*s==’#’)
{
        T   =   NULL;
        return   s+1;
}
else
{
        T   =   new   BiNode;
        T-> data   =   *s;
        s   =   CreateBiTree(T-> lchild,   s+1);
        s   =   CreateBiTree(T-> rchild,   s);
        return   s;
}
为什么左子树是s+1,右子树是s

[解决办法]
很明显,指针s指向一个数组,里面保存了按照前序顺序的二叉树各个节点的数据。#表示叶子节点内的数据。

前序遍历:先访问根节点,然后访问左子树,最后访问右子树。

于是上面的算法就很容易明白了。
设s为root,l1,l11,l12,l2,l21,l22。
1)T-> data = *s;
构造根节点并赋值;
2)s = CreateBiTree(T-> lchild, s+1);
从数组里取得左子树的数据s+1,构造左子树并赋值;
最终将返回l2
3)类上,构造右子树并赋值。

自己构造个前序二叉树数组,按照算法画画图一切都搞清楚了。

另外:难道老师没说s是什么吗?

热点排行