#include <iostream>
#include <stack>
using namespace std;
struct node
{
int value;
node* lchild;
node* rchild;
};
void PreOrder(node* root)
{
if(!root)
return;
stack<node*> view;
while(!view.empty() || root)
{
while(root)
{
cout << root->value << " ";
view.push(root);
root = root->lchild;
}
root = view.top();
view.pop();
root = root->rchild;
}
}
void InOrder(node* root)
{
if(!root)
return;
stack<node*> view;
while(!view.empty() || root)
{
while(root)
{
view.push(root);
root = root->lchild;
}
root = view.top();
cout << root->value << " ";
view.pop();
root = root->rchild;
}
}
void PostOrder(node* root)
{
if(!root)
return;
stack<node*> view;
view.push(root);
node* pre = NULL;
while(!view.empty())
{
node* cur = view.top();
if(((cur->lchild == pre || cur->rchild == pre) && pre) || (!cur->lchild && !cur->rchild))
{
cout << cur->value << " ";
view.pop();
pre = cur;
}
else
{
if(cur->rchild)
view.push(cur->rchild);
if(cur->lchild)
view.push(cur->lchild);
}
}
}
int main()
{
node* p1 = new node {6, NULL, NULL};
node* p2 = new node {7, NULL, NULL};
node* p3 = new node {4, p1, p2};
node* p4 = new node {5, NULL, NULL};
node* p5 = new node {3, p3, p4};
cout << "preoder:";
PreOrder(p5);
cout << endl;
cout << "inorder:";
InOrder(p5);
cout << endl;
cout << "postorder:";
PostOrder(p5);
cout << endl;
return 0;
}
二叉树的非递归遍历(后序遍历的经典解法)
最新推荐文章于 2019-08-21 17:00:44 发布