题目6.37:
试利用栈的基本操作写出先序遍历的非递归形式的算法
(我之前的博客写的有)
#include<iostream>
#include<stack>
using namespace std;
#define TElemType double
typedef struct BiTNode
{
TElemType data;
struct BiTNode* lchild,* rchild;
}BiTNode,* BiTree;
void Creat_BiTree(BiTree& T)//递归创建二叉树
{
TElemType num;
if(cin>>num){
T=new BiTNode;
if(!T) exit(-2);
T->data=num;
Creat_BiTree(T->lchild);
Creat_BiTree(T->rchild);
}
if(!cin){
T=nullptr;
cin.clear();
cin.sync();
}
}
void PreOrder_BiTree(BiTree T)//递归先序打印二叉树
{
if(T){
cout<<T->data<<endl;
PreOrder_BiTree(T->lchild);
PreOrder_BiTree(T->rchild);
}
}
void PreOrder_UsingStack(BiTree T)//非递归先序遍历二叉树
//先将左边的点都存入栈,然后弹出一个结点,同时将该结点的右子树的根结点入栈
//一直循环,直至栈为空
{
stack<BiTree> S;
BiTree p=T;
while(p||!S.empt