二叉树的遍历 不知道哪里有问题 求指点
来源:互联网 发布:go编程语言 编辑:程序博客网 时间:2024/05/01 07:00
#include<iostream>
using namespace std;
struct BiNode
{
char data;
BiNode *lchild,*rchild;
};
struct element
{
BiNode *ptr;
int flag;
};
class BiTree
{
public:
BiTree(){root=NULL;}
BiTree(BiNode *root);
// ~BiTree();
void preorder(BiNode *root);
void inorder(BiNode *root);
void postorder(BiNode *root);
void levelorder(BiNode *root);
//void release(BiNode *root);
private:
BiNode *root;
void creat(BiNode *root);
};
void BiTree::preorder(BiNode *root)
{
int top=-1;
BiNode *s=new BiNode;
while(root!=NULL||top!=-1)
{
while(root!=NULL)
{
cout<<root->data;
s[++top]=*root;
root=root->lchild;
}
if(top!=-1)
{
*root=s[top--];
root=root->rchild;
}
}
}
void BiTree::inorder(BiNode *root)
{
int top=-1;
BiNode *s=new BiNode;
while(root!=NULL||top!=-1)
{
while(root!=NULL)
{
s[++top]=*root;
root=root->lchild;
}
if(top!=-1)
{
*root=s[top--];
cout<<root->data;
root=root->rchild;
}
}
}
void BiTree::postorder(BiNode *root)
{
int top=-1;
element *s=new element;
while(root!=NULL||top!=-1)
{
while(root!=NULL)
{
top++;
s[top].ptr=root;
s[top].flag=1;
root=root->lchild;
}
while(top!=-1&&s[top].flag==2)
{
root=s[top--].ptr;
cout<<root->data;
}
if(top!=-1)
{
s[top].flag=2;
root=s[top].ptr->rchild;
}
}
}
/*void BiTree::levelorder(BiTree *root)
{
int front=rear=0;
if(root==NULL)return ;
BiNode *Q=new BiNode;
Q[++rear]=root;
BiNode *q;
while(front!=rear)
{
q=Q[++front];
cout<<q->data;
if(q->lchild!=NULL)
Q[++rear]=q->lchild;
if(q->rchild!=NULL)
Q[++rear]=q->rchild;
}
}
*/
void BiTree::creat(BiNode *root)
{
char ch;
cin>>ch;
if(ch=='#')
root=NULL;
else
{
root=new BiNode;
root->data=ch;
creat(root->lchild);
creat(root->rchild);
}
}
BiTree::BiTree(BiNode *root)
{
creat(root);
}
/*void BiTree::release(BiNode *root)
{
if(root!=NULL)
{
release(root->lchild);
release(root->rchild);
delete root;
}
}
/*BiTree::~BiTree(BiNode *root)
{
release(root);
}*/
int main()
{
BiNode *q=new BiNode;
BiTree s(q);
s.inorder(q);
return 0;
}
using namespace std;
struct BiNode
{
char data;
BiNode *lchild,*rchild;
};
struct element
{
BiNode *ptr;
int flag;
};
class BiTree
{
public:
BiTree(){root=NULL;}
BiTree(BiNode *root);
// ~BiTree();
void preorder(BiNode *root);
void inorder(BiNode *root);
void postorder(BiNode *root);
void levelorder(BiNode *root);
//void release(BiNode *root);
private:
BiNode *root;
void creat(BiNode *root);
};
void BiTree::preorder(BiNode *root)
{
int top=-1;
BiNode *s=new BiNode;
while(root!=NULL||top!=-1)
{
while(root!=NULL)
{
cout<<root->data;
s[++top]=*root;
root=root->lchild;
}
if(top!=-1)
{
*root=s[top--];
root=root->rchild;
}
}
}
void BiTree::inorder(BiNode *root)
{
int top=-1;
BiNode *s=new BiNode;
while(root!=NULL||top!=-1)
{
while(root!=NULL)
{
s[++top]=*root;
root=root->lchild;
}
if(top!=-1)
{
*root=s[top--];
cout<<root->data;
root=root->rchild;
}
}
}
void BiTree::postorder(BiNode *root)
{
int top=-1;
element *s=new element;
while(root!=NULL||top!=-1)
{
while(root!=NULL)
{
top++;
s[top].ptr=root;
s[top].flag=1;
root=root->lchild;
}
while(top!=-1&&s[top].flag==2)
{
root=s[top--].ptr;
cout<<root->data;
}
if(top!=-1)
{
s[top].flag=2;
root=s[top].ptr->rchild;
}
}
}
/*void BiTree::levelorder(BiTree *root)
{
int front=rear=0;
if(root==NULL)return ;
BiNode *Q=new BiNode;
Q[++rear]=root;
BiNode *q;
while(front!=rear)
{
q=Q[++front];
cout<<q->data;
if(q->lchild!=NULL)
Q[++rear]=q->lchild;
if(q->rchild!=NULL)
Q[++rear]=q->rchild;
}
}
*/
void BiTree::creat(BiNode *root)
{
char ch;
cin>>ch;
if(ch=='#')
root=NULL;
else
{
root=new BiNode;
root->data=ch;
creat(root->lchild);
creat(root->rchild);
}
}
BiTree::BiTree(BiNode *root)
{
creat(root);
}
/*void BiTree::release(BiNode *root)
{
if(root!=NULL)
{
release(root->lchild);
release(root->rchild);
delete root;
}
}
/*BiTree::~BiTree(BiNode *root)
{
release(root);
}*/
int main()
{
BiNode *q=new BiNode;
BiTree s(q);
s.inorder(q);
return 0;
}
- 二叉树的遍历 不知道哪里有问题 求指点
- 代码有警告不知道哪里有问题!
- 读取文件中的数据出错,不知道哪里有问题
- 做了个超级简单的网页,不过不知道哪里有问题
- 不知道哪里有适合.NET用的图表控件
- 不知道哪里错了,求指导
- 新手 不知道布局出哪里问题了,有一段 LinearLayout 就是显示不出来
- 求举手 不知道的问题
- 二叉树 知道其他两种遍历方式求另一种
- 请高手指点,PHP问题,解密出一个文件,不知道这个是什么用的,怎么使用,谢谢好友指点
- spring启动IOC时报错,不知道问题出现在哪里,求大神指教
- 一个关于shiro的问题,有大兄弟知道的话进来指点下
- 知道后续遍历和中序遍历还原二叉树并求层析遍历
- 求教安卓学习的问题,求大家指点指点
- utf8和gbk之间的转换,有问题啊,求指点。
- 写了一个可以记录路线的计步器,好像有内存泄露问题,求指点
- 求二叉树的先序遍历
- 求二叉树的先序遍历
- python print 错误 ( invalid syntax)
- (一)线性结构之ArrayList的实现
- Android 圆角效果
- 7 STL迭代器
- 实战Linux Shell(2):布署Bash Shell 的环境
- 二叉树的遍历 不知道哪里有问题 求指点
- 设计模式学习之command模式
- 二叉树
- Android源代码分析(一) 目录结构分析
- 传输层
- [Unity3D]在Unity3D中实现简单的碰撞检测
- 2013年最新的24款jquery插件
- 动态规划(DP)不要62
- 《代码整洁之道》读书笔记4