问题:给定一个n个结点的二叉树,写出一个O(n)时间的非递归过程,将该树的每个结点的关键字输出。可以使用一个栈作为辅助数据结构。
思路:利用栈依次将各个结点压入栈中,输出其值后再弹出。
代码:
#include<iostream>
#include <stack>
using namespace std;
struct Node
{
int key;
Node *left;
Node *right;
Node(int x):key(x),left(NULL),right(NULL){};
};
struct BinTree
{
Node* root;
BinTree():root(NULL){};
};
void Print(BinTree* tr)
{
Node* root1=tr->root;
if(root1==NULL)
return;
stack<Node *> s;
s.push(root1);
while(!s.empty())
{
Node* a=s.top();//输出堆顶元素的关键字并弹出
cout<<a->key<<endl;
s.pop();
if(a->left!=NULL)//再讲堆顶元素的左右孩子压入栈中
s.push(a->left);
if(a->right!=NULL)
s.push(a->right);//输出时先输出右边孩子,若想改变顺序,则改变两个if判断条件的顺序
}
}
int main()
{
Node *myroot=new Node(3);
Node *leftch=new Node(4);
Node *rightch=new Node(5);
myroot->left=leftch;
myroot->right=rightch;
BinTree * myTree=new BinTree();
myTree->root=myroot;
Print(myTree);
delete myroot;
delete leftch;
delete rightch;
return 0;
}