关于树的创建和前序遍历的问题C++
答案:2 悬赏:60
解决时间 2021-03-12 04:41
- 提问者网友:霸道ぁ小哥
- 2021-03-11 21:05
希望朋友们帮忙解决下前序遍历中问题所在,帮忙解释下噶~谢谢啦
#include
using namespace std;
#define _false 1
#define _true 0
class tree
{
//tree *ntree;
tree *left;
tree *right;
char data;
public:
int create(tree* &t) //创建树
{
//cout<<"请输入需要存储的信息:"< //data=getchar();
char ch;
cin>>ch;
if(ch=='#')
t=NULL; //表示空子树
else
{
tree *t=new tree;
if(!t) exit(1) ;
t->data=ch;
create(t->left);
create(t->right);
}
return 0;
}
void pre_travel(tree* &t)
{
if(t)
{
cout<data;
pre_travel(t->left);
pre_travel(t->right);
}
}
};
void main()
{
cout<<"请输入需要存储的信息:"< tree y;
tree *t;
y.create(t);
cout<<"前序遍历"< y.pre_travel(t);
}
最佳答案
- 二级知识专家网友:时光挺欠揍
- 2021-03-11 22:02
create函数里面
else
{
tree *t=new tree; //把前面的tree *去掉,否则是又定义一个局部变量t了。
全部回答
- 1楼网友:颜值超标
- 2021-03-11 22:16
void dlr(binarytree *p) //前序遍历递归算法 { if(p!=null) { cout<<p->data<<endl; dlr(p->lchild); dlr(p->rchild); } }void dlr(binarytree *p) //前序遍历非递归算法 { stack<binarytree> *s; //定义堆栈s binarytree *p=root; //指向根节点 while(p!=null || !s.empty()) { while(p!=null) { cout<<p->data<<endl; s.push(p); p=p->lchild; } if(!s.empty()) { p=s.top(); s.pop(); p=p->rchild; } } }void lrd(binarytree *p) //后序遍历递归算法 { if(p!=null) { lrd(p->lchild); lrd(p->rchild); cout<<p->data<<endl; } }void lrd(binarytree *p) //后序遍历非递归算法 { stack<binarytree> *s; //定义堆栈s binarytree *current=p; //当前节点 binarytree *pre=null; //前一节点 while(current!=null || !s.empty()) { while(current!=null) { s.push(current); current=current->lchild; } current=s.top(); if(current->rchild==null || current->rchild==pre) { cout<<current->data<<endl; pre=current; s.pop(); current=null; } else current=current->rchild; } }void leveltrace(binarytree *p) //层次遍历 { queue<binarytree> *q; //定义队列q binarytree *t=p; if(visit(t)) q.push(t) //visit()代表已被遍历过 while(!q.empty()) { t=q.front(); q.pop(); if(visit(t->lchild)) q.push(t->lchild); if(visit(t->rchild)) q.push(t->rchild); } }
我要举报
大家都在看
推荐资讯