#include <stdio.h> #include <stdlib.h> #include <queue> #include <stack> #include <iostream >using namespace Std;struct node{int key;node *left, *right;}; void Inserttree (node* &root,int val) {node* tmp = (node*) malloc (sizeof (node)); Tmp->key = Val;tmp->left = tmp-& Gt;right = Null;node *q = NULL, *p = Root;while (p) {q = p;if (P->key > val) p = P->left;else if (P->key < V AL) p = p->right;else return;} if (q = = NULL) root = Tmp;else if (Q->key > val) q->left = Tmp;else q->right = tmp;} Non-recursive traversal//sequence traversal void Printbylevel (node *root) {node *p;queue<node*> q;q.push (root); while (!q.empty ()) {p = Q.front () ; Q.pop (); if (p) {printf ("%d", P->key); Q.push (P->left); Q.push (p->right);}} printf ("\ n");} Middle sequence traversal void Printbyinorder (node* root) {stack<node*> S;node *p = root;while (P | |!s.empty ()) {while (p) {S.push (p);p = P->left;} if (!s.empty ()) {p = s.top (); S.pop ();p rintf ("%d", p->key);p = P->right;}} printf ("\ n");} Pre-sequence traversal void PRINtbypreorder (node* root) {stack<node*> s;node* p = root;while (p| |! S.empty ()) {while (p) {printf ("%d", P->key), S.push (p);p = P->left;} if (!s.empty ()) {p = s.top (); S.pop ();p = P->right;}} printf ("\ n");} Post-post traversal void Printbypostorder (node *root) {stack<node*> s;node* p = root;while (P | |!s.empty ()) {while (p) {printf ("%d ", P->key); S.push (p);p = P->right;} if (!s.empty ()) {p = s.top (); S.pop ();p = P->left;}} printf ("\ n");} Recursive traversal of void inorder (node* root) {if (root) {inorder (root->left);p rintf ("%d", Root->key); Inorder (Root->right) ;}} void preorder (node* root) {if (root) {printf ("%d", Root->key);p reorder (root->left);p reorder (root->right);}} void Postorder (node* root) {if (root) {postorder (root->left);p Ostorder (root->right);p rintf ("%d", Root->key) ;}} int main () {node *root = null;int a[] = {8, 4, 2, 6, 3,, 5,, 7,};for (int i = 0; i < one; ++i) Inserttree (r Oot, A[i]);p rintf ("Recursive traversal:inorder preorder postorder\n"); Inorder (Root;p rintf ("\ n");p reorder (root);p rintf ("\ n");p Ostorder (Root);p rintf ("\ n");p rintf ("Iteration Traversal:level Inorder preorder postorder\n ");p rintbylevel (Root);p Rintbyinorder (Root);p Rintbypreorder (Root);p rintf (" Postorder Traversal print in reverse: ");p Rintbypostorder (root);}
For the non-recursive implementation of the post-order traversal, the program is output in the opposite direction, the vector can be used to achieve the correct direction.
Traversal of a binary tree, recursion, iteration, sequence, middle order, pre-order, sequence