我数据结构期末考试的一道算法题.好象出错了,请各位鉴别一下.
交换左右子树:
结构类型如下
typedef struct StNode
{
ElemType data;
struct StNode lchild,rchild;//
}BtNode,*BiTree;
我的分析是这样的:
这个结构体的声名是一层一层嵌套,最终,一个树被看作一个节点,就好象是 这样一个食物链(应该不准确,不过也差不多)
一条小鱼吃一个龙虾,然后小鱼被中鱼吃,终于再被大鱼吃,\
这样:最终的结果是,龙虾 小鱼 中鱼 都在大鱼的肚子里面 ,他们怎么能改变次序呢?
而且这样结构的一棵树很显然是没有实际意义的,因为,如果这个树节点要是非常多的话,那么他们是一体的,会是多大的内存空间?如果要是运行起来,怎么能装到一块内存中(如果要是很大的话,ˇ-ˇ)
再回到这个题中,他们的交换子树,和下面这个是等价的:
把一个INT型的树进行分解,试想如果要把一个4字节的INT树分解,然后重新排序,属于微观的东西了.根本也就没有什么实用的地方了.
所以,这道题目 因为最后的左右子树没有用指针表示,所以非常不合理
不知道我分析的对不对.
[解决办法]
这样定义应该是有逻辑错误的
这样的话结构体的大小都无法确定了
刚才试了一下,编译是通不过的
[解决办法]
应该没有问题
一个节点的类型本来就是这种结构的
它的左右孩子也可能为空啊
[解决办法]
lChild, rChild 要定义成指针的
[解决办法]
如果不是指针的话,那应该就不对。
因为一个普通的树不用指针的话很难建立,除非用对象。
没有分配内存是不会影响内存的
[解决办法]
typedef struct StNode
{
ElemType data;
struct StNode lchild,rchild;//
}BtNode,*BiTree;
这个定义是错的
自己包含自己,就是个无限的循环了,
应该包含的是指针
struct StNode *lchild,*rchild;