您的位置:程序门 -> c/c++ -> c++ 语言



构造二叉树的问题


[收藏此页] [打印本页]选择字色:背景色:字体:[][][]


构造二叉树的问题[已结贴,结贴人:nana2zs]
发表于:2007-02-01 19:05:40 楼主
在构造前序遍历的二叉树时
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
发表于:2007-02-02 08:27:531楼 得分:0
你这不是写着么:“t-> lchild,   s+1”
发表于:2007-02-02 09:02:242楼 得分:0
s   =   createbitree(t-> lchild,   s+1);
  s   =   createbitree(t-> rchild,   s);
发表于:2007-02-02 09:11:553楼 得分:0
这是个递归的过程   执行的时候s=s+1
发表于:2007-02-02 09:34:354楼 得分:0
这是老师上课讲的,我不知道为什么
发表于:2007-02-02 09:52:225楼 得分:0
遍历的时候无论什么顺序,肯定的是左子树先于右子树
发表于:2007-02-02 16:40:436楼 得分:20
很明显,指针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是什么吗?
发表于:2007-02-02 17:04:187楼 得分:0
我知道s是一个指针,但就是看不懂
发表于:2007-02-02 17:25:538楼 得分:0
这个树的父亲节点跟右孩子的值相等吧
发表于:2007-02-02 17:45:579楼 得分:0
s   =   createbitree(t-> lchild,   s+1);
这句相当于   t-> lchild-> data=*(s+1);
s=s+1;
发表于:2007-02-02 19:30:3410楼 得分:0
晕。s+1,s这些值是你自己定的呀,你自己规定了树的父亲节点跟右孩子的值相等,当然就这样写。如果你不想这样写,写成s+1,s+2还不是一样。
你们老师只是举个例子。没有什么为什么,随便写的值。


快速检索

最新资讯
热门点击