// C program for different tree traversals #include<iostream> usingnamespacestd; /* A binary tree node has data, pointer to left child and a pointer to right child */ structNode { int data; structNode* left, *right; Node(int data) { this->data = data; left = right = NULL; } }; /* Given a binary tree, print its nodes according to the "bottom-up" postorder traversal. */ voidprintPostorder(struct Node* node) { if (node == NULL) return; // first recur on left subtree printPostorder(node->left); // then recur on right subtree printPostorder(node->right); // now deal with the node cout << node->data << " "; } /* Given a binary tree, print its nodes in inorder*/ voidprintInorder(struct Node* node) { if (node == NULL) return; /* first recur on left child */ printInorder(node->left); /* then print the data of node */ cout << node->data << " "; /* now recur on right child */ printInorder(node->right); } /* Given a binary tree, print its nodes in preorder*/ voidprintPreorder(struct Node* node) { if (node == NULL) return; /* first print data of node */ cout << node->data << " "; /* then recur on left sutree */ printPreorder(node->left); /* now recur on right subtree */ printPreorder(node->right); } /* Driver program to test above functions*/ intmain() { structNode *root = newNode(1); root->left = new Node(2); root->right = new Node(3); root->left->left = new Node(4); root->left->right = new Node(5); cout << "\nPreorder traversal of binary tree is \n"; printPreorder(root); cout << "\nInorder traversal of binary tree is \n"; printInorder(root); cout << "\nPostorder traversal of binary tree is \n"; printPostorder(root); return0; }
// C++ program to print inorder traversal // using stack. #include<bits/stdc++.h> usingnamespacestd;
/* A binary tree Node has data, pointer to left child and a pointer to right child */ structNode { int data; structNode* left; structNode* right; Node (int data) { this->data = data; left = right = NULL; } };
/* Iterative function for inorder tree traversal */ voidinOrder(struct Node *root) { stack<Node *> s; Node *curr = root;
while (curr != NULL || s.empty() == false) { /* Reach the left most Node of the curr Node */ while (curr != NULL) { /* place pointer to a tree node on the stack before traversing the node's left subtree */ s.push(curr); curr = curr->left; }
/* Current must be NULL at this point */ curr = s.top(); s.pop();
cout << curr->data << " ";
/* we have visited the node and its left subtree. Now, it's right subtree's turn */ curr = curr->right;
} /* end of while */ }
/* Driver program to test above functions*/ intmain() {
/* Constructed binary tree is 1 / \ 2 3 / \ 4 5 */ structNode *root = newNode(1); root->left = new Node(2); root->right = new Node(3); root->left->left = new Node(4); root->left->right = new Node(5);