早教吧作业答案频道 -->其他-->
以二叉链表为存储结构,分别写出前序、中序、后序遍历二叉树的递归与非递归算法。(数据结构)
题目详情
以二叉链表为存储结构,分别写出前序、中序、后序遍历二叉树的递归与非递归算法。(数据结构)
▼优质解答
答案和解析
#include
#include
typedef char ElemType;
struct BTreeNode
{
ElemType data;
BTreeNode*left;
BTreeNode*right;
};
void InitBTree(BTreeNode*& BT)
{
BT=NULL;
}
void CreateBTree(BTreeNode*& BT,char*a)
{
const int MaxSize=1000;
BTreeNode*s[MaxSize];
int top=-1;
BT=NULL;
BTreeNode*p;
int k;
int i=0;
while (a[i])
{
switch(a[i])
{
case ' ':
break;
case'(':
if(top==MaxSize-1)
{
cout< exit(1);
}
top++; s[top]=p;k=1;
break;
case ')':
if(top==-1)
{
cout< }
top--;
break;
case ',':
k=2;
break;
default:
p=new BTreeNode;
p->data=a[i];p->left=p->right=NULL;
if(BT==NULL) BT=p;
else
{
if(k==1) s[top]->left=p;
else s[top]->right=p;
}
}
i++;
}
}
bool EmptyBTree (BTreeNode*BT)
{
return BT==NULL;
}
void PreOrder(BTreeNode* BT)
{
if(BT!=NULL)
{
cout<data< PreOrder(BT->left);
PreOrder(BT->right);
}
}
void InOrder(BTreeNode* BT)
{
if(BT!=NULL)
{
InOrder(BT->left);
cout<data< InOrder(BT->right);
}
}
void PostOrder(BTreeNode* BT)
{
if(BT!=NULL)
{
PostOrder(BT->left);
PostOrder(BT->right);
cout<data< }
}
void LevelOrder(BTreeNode* BT)
{
const int MaxSize=30;
BTreeNode* q[MaxSize];
int front=0,rear=0;
BTreeNode* p;
if(BT!=NULL)
{
rear=(rear+1)%MaxSize;
q[rear]=BT;
}
while (front!=rear)
{
front=(front+1)%MaxSize;
p=q[front];
cout<data< if(p->left!=NULL)
{
rear=(rear+1)%MaxSize;
q[rear]=p->left;
}
if(p->right!=NULL)
{
rear=(rear+1)%MaxSize;
q[rear]=p->right;
}
}
}
void PrintBTree(BTreeNode*BT)
{
if(BT!=NULL)
{
cout<data;
if(BT->left!=NULL || BT->right!=NULL )
{
cout< PrintBTree(BT->left);
if(BT->right!=NULL)
cout< PrintBTree(BT->right);
cout< }
}
}
void ClearBTree(BTreeNode*&BT)
{
if(BT!=NULL)
{
ClearBTree(BT->left);
ClearBTree(BT->right);
delete BT;
BT=NULL;
}
}
void main()
{
BTreeNode* bt;
InitBTree(bt);
char b[50];
cout< cin.getline(b,sizeof(b));
CreateBTree(bt,b);
PrintBTree(bt); cout< cout< cout< cout< cout< }
#include
typedef char ElemType;
struct BTreeNode
{
ElemType data;
BTreeNode*left;
BTreeNode*right;
};
void InitBTree(BTreeNode*& BT)
{
BT=NULL;
}
void CreateBTree(BTreeNode*& BT,char*a)
{
const int MaxSize=1000;
BTreeNode*s[MaxSize];
int top=-1;
BT=NULL;
BTreeNode*p;
int k;
int i=0;
while (a[i])
{
switch(a[i])
{
case ' ':
break;
case'(':
if(top==MaxSize-1)
{
cout< exit(1);
}
top++; s[top]=p;k=1;
break;
case ')':
if(top==-1)
{
cout< }
top--;
break;
case ',':
k=2;
break;
default:
p=new BTreeNode;
p->data=a[i];p->left=p->right=NULL;
if(BT==NULL) BT=p;
else
{
if(k==1) s[top]->left=p;
else s[top]->right=p;
}
}
i++;
}
}
bool EmptyBTree (BTreeNode*BT)
{
return BT==NULL;
}
void PreOrder(BTreeNode* BT)
{
if(BT!=NULL)
{
cout<
PreOrder(BT->right);
}
}
void InOrder(BTreeNode* BT)
{
if(BT!=NULL)
{
InOrder(BT->left);
cout<
}
}
void PostOrder(BTreeNode* BT)
{
if(BT!=NULL)
{
PostOrder(BT->left);
PostOrder(BT->right);
cout<
}
void LevelOrder(BTreeNode* BT)
{
const int MaxSize=30;
BTreeNode* q[MaxSize];
int front=0,rear=0;
BTreeNode* p;
if(BT!=NULL)
{
rear=(rear+1)%MaxSize;
q[rear]=BT;
}
while (front!=rear)
{
front=(front+1)%MaxSize;
p=q[front];
cout<
{
rear=(rear+1)%MaxSize;
q[rear]=p->left;
}
if(p->right!=NULL)
{
rear=(rear+1)%MaxSize;
q[rear]=p->right;
}
}
}
void PrintBTree(BTreeNode*BT)
{
if(BT!=NULL)
{
cout<
if(BT->left!=NULL || BT->right!=NULL )
{
cout< PrintBTree(BT->left);
if(BT->right!=NULL)
cout< PrintBTree(BT->right);
cout< }
}
}
void ClearBTree(BTreeNode*&BT)
{
if(BT!=NULL)
{
ClearBTree(BT->left);
ClearBTree(BT->right);
delete BT;
BT=NULL;
}
}
void main()
{
BTreeNode* bt;
InitBTree(bt);
char b[50];
cout< cin.getline(b,sizeof(b));
CreateBTree(bt,b);
PrintBTree(bt); cout<
看了 以二叉链表为存储结构,分别写...的网友还看了以下:
人们把钱存入银行中的活期存款定期存款储蓄算人们手中持有的货币吗?利率一般指人们储蓄时的人们把钱存入 2020-05-23 …
存储周期是指( )。A.存储器的读出时间B.存储器的写入时间C.存储器进行连续读和写操作所允许的最 2020-05-24 …
存储周期是指()。A.存储器的写入时间B.存储器的读出时间C.存储器进行连续写操作允许的最短时间间 2020-05-24 …
(6)A.每秒钟所能执行的指令条数B.存储器读写速度C.计算机即时存储信息的能力D.该计算机保存大量 2020-05-26 …
计算机采用分级存储体系的主要目的是为了解决( )的问题。A.主存容量不足 B.存储器读写可靠性C.外 2020-05-26 …
计算机采用分级存储体系的主要目的是为了解决 () 的问题。A.主存容量不足B.存储器读写可靠性C.外 2020-05-26 …
计算机采用分级存储体系的主要目的是为了解决 (3) 的问题。A.主存容量不足B.存储器读写可靠性 2020-05-26 …
计算机存储与信息简报存储的区别在于()A.计算机存储是存储主要方式B.计算机存储信息量大C.计算机 2020-05-31 …
信息存储与信息简报存储的区别在于()。A.计算机存储是存储主要方式B.计算机存储信息量大C.计算机 2020-05-31 …
计算机的机器字长是指数据存储与运算的基本单位.这句话对吗?数据存储不是有储存字长吗? 2020-06-06 …