#include<iostream>
#include<queue>
#include<stack>
using namespace std;
typedef struct Binode
{
char data;
struct Binode *lchild,*rchild;
}Binode,*Bitree;
Bitree BitreeCreate()
{
Bitree T;
char ch;
cin>>ch;
if(ch=='#')
T=NULL;
else
{
T=(Binode*)malloc(sizeof(Binode));
T->data=ch;
T->lchild=BitreeCreate();
T->rchild=BitreeCreate();
}
return T;
}
int height(Bitree T)
{
int lheight,rheight;
if(T==NULL)
return -1;
else
{
lheight=height(T->lchild);
rheight=height(T->rchild);
if(lheight>rheight)
return(lheight+1);
else
return(rheight+1);
}
}
void PreTraverse(Bitree T)
{
if(T)
{
cout<<T->data;
PreTraverse(T->lchild);
PreTraverse(T->rchild);
}
}
void PreTraverse2(Bitree T)
{
stack<Binode*>Pre;
Bitree temp;
temp=T;
while(temp||!Pre.empty())
{
while(temp)
{
Pre.push(temp);
cout<<temp->data;
temp=temp->lchild;
}
if(!Pre.empty())
{
temp=Pre.top();
Pre.pop();
temp=temp->rchild;
}
}
}
void InTraverse(Bitree T)
{
if(T)
{
InTraverse(T->lchild);
cout<<T->data;
InTraverse(T->rchild);
}
}
void InTraverse2(Bitree T)
{
stack<Binode*>Pre;
Bitree temp;
temp=T;
while(temp||!Pre.empty())
{
while(temp)
{
Pre.push(temp);
temp=temp->lchild;
}
if(!Pre.empty())
{
temp=Pre.top();
cout<<temp->data;
Pre.pop();
temp=temp->rchild;
}
}
}
void PostTraverse(Bitree T)
{
if(T)
{
PostTraverse(T->lchild);
PostTraverse(T->rchild);
cout<<T->data;
}
}
void PostTraverse2(Bitree T)
{
stack<Binode*> s;
Binode *cur; //当前结点
Binode *pre=NULL; //前一次访问的结点
s.push(T);
while(!s.empty())
{
cur=s.top();
if((cur->lchild==NULL&&cur->rchild==NULL)||
(pre!=NULL&&(pre==cur->lchild||pre==cur->rchild)))
{
cout<<cur->data; //如果当前结点没有孩子结点或者孩子节点都已被访问过
s.pop();
pre=cur;
}
else
{
if(cur->rchild!=NULL)
s.push(cur->rchild);
if(cur->lchild!=NULL)
s.push(cur->lchild);
}
}
}
void LevelTraverse(Bitree T)
{
queue<Binode*>qtree;
qtree.push(T);
while(qtree.size())
{
Bitree temp;
temp=qtree.front();
qtree.pop();
cout<<temp->data;
if(temp->lchild)
qtree.push(temp->lchild);
if(temp->rchild)
qtree.push(temp->rchild);
}
}
int main()
{
Bitree T;
T=BitreeCreate();
cout<<height(T);
system("pause");
return 0;
}
二叉树的前序中序后序遍历,非递归遍历 层次遍历
最新推荐文章于 2022-08-22 15:37:08 发布