月之海兄,你修改后能运行吗?

gudfen 2005-03-15 06:49:21
RT
...全文
69 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
gudfen 2005-03-16
  • 打赏
  • 举报
回复
同意
zengwujun 2005-03-16
  • 打赏
  • 举报
回复
我们学数据结构,只是学它的算法思想,学它建模的方式,至于程序的代码,我认为只是用来验证算法正确性的,如果有现成的东西能够加快验证的过程(vector),那我为什么不用呢。

除非你是想:堆栈我不熟悉,我想练练,那另当别论.
zengwujun 2005-03-16
  • 打赏
  • 举报
回复
这是你的程序,我只改了加注释的3个地方,还有最后一个注释下面的那句。

运行完全正确啊,我是vc6+xp
zengwujun 2005-03-16
  • 打赏
  • 举报
回复
#include <vector>
#include "iostream.h"

using namespace std;
typedef struct tree{
int data;
tree *left,*right;
}bitree;


void insertBitree(bitree **tree, int data) {
if(*tree == NULL) {
*tree = (bitree *)malloc(sizeof(bitree));
(*tree)->data = data;
(*tree)->left = NULL;
(*tree)->right= NULL;
} else if(data <= (*tree)->data)
insertBitree(&((*tree)->left), data);
else
insertBitree(&((*tree)->right), data);

}


void free(bitree *t){
if(!t){
free(t->left);
free(t->right);
delete t;
}
}

void main(){
bitree *tree=NULL;

insertBitree(&tree,66);
insertBitree(&tree,12);
insertBitree(&tree,333);
insertBitree(&tree,45);
insertBitree(&tree,78);
insertBitree(&tree,676);

vector <bitree *> s;//这里不要给vector,20个元素,它使empty判断不正确
bitree * p = tree;
s.push_back(tree);

while( !s.empty()){
while(p->left ){
p = p->left;
s.push_back(p);
}
p = s.back();
s.pop_back();
cout<<p->data<<',';//加了一个',',输出间隔
if(p->right)
{
p=p->right;//这里要使p重新指向,否则右子树的左节点不会被访问
s.push_back(p);
}
}

free(tree);
}

33,008

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧