#include<iostream>
#include "stack"
using namespace std;
struct node{
	char c;
	node* left;
	node *right;
	bool flag;
};

void pre(node* head){//非递归前序遍历
	stack<node*> s;
	while (head || !s.empty()){
		if (head){
			cout << head->c;
			s.push(head);
			head = head->left;
		}
		else{
			head = s.top()->right;
			s.pop();
		}
	}
}
void middle(node* head){//非递归中序遍历
	stack<node*> s;
	node* p;
	while (head || !s.empty()){
		if (head){
			s.push(head);
			head = head->left;
		}
		else{
			p = s.top();
			cout << p->c;
			s.pop();
			head = p->right;
		}
	}
}

  void post(node* head){//非递归后序遍历
	node* p;
	stack<node*> s;
	while (head || !s.empty()){
		if (head){
			s.push(head);
			head = head->left;
		}
		else{
			p = s.top();
			if (p->flag){
				cout << p->c;
				s.pop();
			}
			else{
				head = p->right;
				p->flag = true;//代表右子树已经访问过
			}
		}
	}
}
int main(int argc, char **argv)
{
	node f = { 'f', 0, 0, false };
	node e = { 'e', &f, 0, false };
	node d = { 'd', 0, 0, false };
	node b = { 'b', &d, &e, false };
	node g = { 'g', 0, 0, false };
	node c = { 'c', 0, &g, false };
	node a = { 'a', &b, &c, false };
	pre(&a);
	cout << endl;
	middle(&a);
	cout << endl;
	post(&a);
}

相关文章:

  • 2021-12-10
  • 2021-12-03
  • 2021-11-13
  • 2021-12-27
  • 2021-07-31
  • 2022-12-23
  • 2022-12-23
  • 2022-02-19
猜你喜欢
  • 2022-12-23
  • 2021-12-20
  • 2022-12-23
  • 2021-04-27
  • 2021-09-23
  • 2022-01-27
  • 2022-12-23
相关资源
相似解决方案