分别用了三种不同的方法实现了二叉树的前序遍历。
#include<iostream>
#include<stack>
using namespace std;
struct BTreeNode{
//二叉树
int data;
BTreeNode *lchild;
BTreeNode *rchild;
BTreeNode *parent;
};
/*
void PreOrder(BTreeNode *t){
//递归方法
if(t == NULL)return ;
cout<<t->data<<' ';
PreOrder(t->lchild);
PreOrder(t->rchild);
}
*/
/*
void PreOrder(BTreeNode *t){
//用栈,采取先放右子树再放左子树的方法,达到输出时先左后右
stack<BTreeNode*> s;
BTreeNode *temp;
if(t == NULL)return ;
s.push(t);
while(!s.empty()){
temp = s.top();
s.pop();
cout<<temp->data<<' ';
if(temp->rchild != NULL)s.push(temp->rchild);
if(temp->lchild != NULL)s.push(temp->lchild);
}
}
*/
void PreOrder(BTreeNode *t){
//不断往左走并访问,直到无法走后,回溯到先一个结点的右边,再重复
stack<BTreeNode*> s;
BTreeNode *temp;
while(t != NULL || !s.empty()){
while(t != NULL){
cout<<t->data<<" ";
s.push(t);
t = t->lchild;
}
if(!s.empty()){
t = s.top();
s.pop();
t = t->rchild;
}
}
}
int main(){
return 0;
}