这个c++程序怎么改才对,求大神

#include <iostream>
#include<queue>
#include <string>
using namespace std;

class BiTreeNode
{
public:
char data; //dote
BiTreeNode *LeftChild; //left*
BiTreeNode *RightChild; //right*
BiTreeNode():LeftChild(NULL),RightChild(NULL){}
~BiTreeNode(){}
};

class BiTree
{
private:
BiTreeNode *Root; //root*
int pos;
string strTree;
BiTreeNode* CreateBiTree();
public:
BiTree(){};
~BiTree(){};
void CreateTree(string TreeArray);
void levelorder();

};

void BiTree::CreateTree(string TreeArray)
{
pos = 0;
strTree.assign(TreeArray);
Root = CreateBiTree();
}

BiTreeNode* BiTree::CreateBiTree()
{
BiTreeNode *T;
char ch;
ch = strTree[pos++];
if(ch == '0')
T = NULL;
else
{
T = new BiTreeNode();
T->data = ch;
T->LeftChild = CreateBiTree();
T->RightChild = CreateBiTree();
}
return T;
}
void BiTree::levelorder()
{
queue<BiTreeNode*>q;
BiTreeNode *p;
p=Root;
if(p!=NULL)
q.push(p);
while(!q.empty()){
cout<<p->data;
if(p->LeftChild!=NULL)
q.push(p->LeftChild);
if(p->RightChild!=NULL)
q.push(p->RightChild);
}
}

int main()
{
int t,i;
string s1;
BiTree test;
cin>>t;
for(i = 0;i < t;i++)
{
cin>>s1;
test.CreateTree(s1);
test.levelorder();

}
return 0;
}
实现层次遍历的程序,从上到下,从左到右

void BiTree::levelorder()
{
     queue<BiTreeNode*>q;
     BiTreeNode *p;
     p=Root;
     if(p!=NULL)
       q.push(p);
     while(!q.empty()){
        temp = q.front();         
        cout << temp->data << "  ";  
        q.pop();  
     if(temp->LeftChild!=NULL)
        q.push(temp->LeftChild);
     if(temp->RightChild!=NULL)
        q.push(temp->RightChild);
     }
}

温馨提示:内容为网友见解,仅供参考
第1个回答  2014-10-31

你的 levelorder 里面好像没有 pop 操作吧,访问完一个节点之后应该将它出队,不然就是死循环了,队列永远不会空:

while(!q.empty()) {
    p = q.front(); // 首先获取队首元素
    cout << p->data;
    
    if(p->LeftChild != NULL)
        q.push(p->LeftChild);
    if(p->RightChild != NULL)
        q.push(p->RightChild);
    q.pop();  // 记得出队
 }

本回答被网友采纳
第2个回答  2014-10-31

请帮我看看这个c++程序是什么错误 应该怎样改
首先,表示,窗口程序编写没有问题。我想,你的问题是,编译环境设置问题。如果是VC++6.0下,找到属性选项,选择设置 菜单项。进入 链接选项卡 在最下面的一个文本框中,找到console修改成windows就可以编译运行了。

一个c++程序不知道怎么修正,望大神们看一下。
应该用指针动态创建对象数组或者改用vector定义动态数组

怎么修改这个c++程序
1、#include<iosmanip>改为#include<iomanip>(格式控制头文件)2、spacename改为namespace(命名空间)3、变量i、j没有定义:for(int i=1;i<=9;i++),for(int j=1;j<=i;j++)4、换行符应为“\\n”,符号最好用双引号括起来 5、代码:include<iostream> include<iomanip> using namespace...

请帮我看看这个C++程序到底问题在哪,怎么改
using std::vector;using std::setprecision; using std::precision 把上面这一堆改成 using namespace std;试试

请问这个C++程序需要怎么修改 出错的地方我是想用函数重载
先占位置,在帮你看吧 下面的这个函数参数的ez改为e,写错了吧 int arrayfind(T* a, int n,T ez,int (*fcmp)(const int,const int))\/\/查找 { int i;for(i=0;i<n; i++)if(fcmp(a[i], e) == 0)return i;return -1;}template <class T > 另外,你写的两个查找的模板...

这个C++求平均值程序为什么不对?
这个C++求平均值程序有两处错误,如图中标示。错误一:整数数组结束不能用\\0,只能通过数组大小n控制循环次数。改成i<n。错误二:ave函数要返回double类型,你的结果avg是个整形不合适,更重要的是avg\/n整形相除只保留整数,除非你不想要小数,否则请把avg数据类型改成double。

对于这个C++程序,我又一些疑问,希望能帮我解读。
附上对你程序的修改:include <iostream> using namespace std;int main(){ void swap(int x,int y);int x=3,y=8;cout<<x<<y;swap(x,y);return 0;\/\/如果想下面一句输出执行,这句移到它的后面 cout<<x<<y;} void swap(int x,int y){ cout<<x<<y;int z;z=x;x=y;y=z;...

请问一下我的这个C++程序要怎么改正?
include<iostream>#include"student.h"using namespace std;void main(){student a;a.set();a.disp();\/*cout<<"avg"<<a.avg();*\/cout<<"参加考试总人数:"<<num<<'\\t'<<"总分数:"<<sum<<'\\t'<<"平均分:"<<avg()<<'\\n';}你的代码错误是在:cout<<"参加考试总人数:"<<...

c++错误怎么修复
在修改完代码后,需要重新编译并运行程序以验证错误是否已被修复。如果程序仍然报错,需要根据新的错误信息继续检查和修改代码,直到程序正常运行为止。此外,还应该进行充分的测试以确保程序的稳定性和可靠性。修复C++错误需要耐心和细心,理解错误信息并根据这些信息来定位问题是非常关键的。通过不断练习和积累...

这个c++小程序那里出错了,请改正
using namespace std;int add(int x,int y) ; \/\/ main看不到add函数,因为它在后面,所以可以提前声明一下就好了。int main(){ int a,b,c;cin>>a>>b;c=add(a,b);cout<<"a+b"<<c<<endl;return 0;} int add(int x,int y){ int z;z=x+y;return z;} ...

相似回答