3,881
社区成员
发帖
与我相关
我的任务
分享
#include <stdio.h>
#include <stack>
using namespace std;
void exPrintNum(int num[], int n);
void exPrintNum2(int num[],int i);
void midPrintNum(int num[], int n);
void midPrintNum2(int num[],int i);
void lastPrintNum(int num[], int n);
void lastPrintNum2(int num[], int i);
int main()
{
int num[401];
int i;
for (i=0;i<=400;i++)
num[i]=(i<=7?i:-1);
lastPrintNum(num,1);
printf("\n");
lastPrintNum2(num,1);
printf("\n");
return 0;
}
//递归:模拟二叉树前序遍历
void exPrintNum(int num[], int n)
{
if (num[n]==-1)
return;
printf("%d ",num[n]);
exPrintNum(num,2*n);
exPrintNum(num,2*n+1);
}
//迭代:模拟二叉树前序遍历
void exPrintNum2(int num[],int i)
{
if (num[i]==-1) return;
stack<int> s;
while (num[i]!=-1||!s.empty())
{
while (num[i]!=-1)
{
printf("%d ",num[i]);
s.push(i);
i=2*i;
}
i=s.top();
s.pop();
i=2*i+1;
}
}
//递归:模拟二叉树中序遍历
void midPrintNum(int num[], int n)
{
if (num[n]==-1)
return;
midPrintNum(num,2*n);
printf("%d ",num[n]);
midPrintNum(num,2*n+1);
}
//迭代:模拟二叉树中序遍历
void midPrintNum2(int num[],int i)
{
if (num[i]==-1) return;
stack<int> s;
while (num[i]!=-1||!s.empty())
{
while (num[i]!=-1)
{
s.push(i);
i=2*i;
}
i=s.top();
s.pop();
printf("%d ",num[i]);
i=2*i+1;
}
}
//递归:模拟二叉树后序遍历
void lastPrintNum(int num[], int n)
{
if (num[n]==-1)
return;
lastPrintNum(num,2*n);
lastPrintNum(num,2*n+1);
printf("%d ",num[n]);
}
//迭代:模拟二叉树后序遍历
void lastPrintNum2(int num[],int i)
{
if (num[i]==-1) return;
stack<int> s;
while (num[i]!=-1||!s.empty())
{
while (num[i]!=-1||!s.empty())
{
while (num[i]!=-1)
{
s.push(i);
i=2*i;
}
i=s.top();
s.pop();
s.push(i);
i=2*i+1;
}
printf("%d ",num[i]);
}
}