Given a Binary Tree consisting of N nodes, the task is to print its Double Order Traversal.
Double Order Traversal is a tree traversal technique in which every node is traversed twice in the following order:
- Visit the Node.
- Traverse the Left Subtree.
- Visit the Node.
- Traverse the Right Subtree.
Examples:
Input:
1
/ \
7 3
/ \ /
4 5 6
Output: 1 7 4 4 7 5 5 1 3 6 6 3
Input:
1
/ \
7 3
/ \ \
4 5 6
Output: 1 7 4 4 7 5 5 1 3 3 6 6
Approach:
The idea is to perform Inorder Traversal recursively on the given Binary Tree and print the node value on visiting a vertex and after the recursive call to the left subtree during the traversal.
Follow the steps below to solve the problem:
- Start Inorder traversal from the root.
- If the current node does not exist, simply return from it.
- Otherwise:
- Print the value of the current node.
- Recursively traverse the left subtree.
- Again, print the current node.
- Recursively traverse the right subtree.
- Repeat the above steps until all nodes in the tree are visited.
Below is the implementation of the above approach:
C++
// C++ Program to implement// the above approach#include <iostream>using namespace std;// Node Structurestruct node { char data; struct node *left, *right;};// Function to create new nodestruct node* newNode(char ch){ // Allocate a new node in memory struct node* Node = new node(); Node->data = ch; Node->left = NULL; Node->right = NULL; return Node;}// Function to print Double Order traversalvoid doubleOrderTraversal(struct node* root){ if (!root) return; // Print Node Value cout << root->data << " "; // Traverse Left Subtree doubleOrderTraversal(root->left); // Print Node Value cout << root->data << " "; // Traverse Right SubTree doubleOrderTraversal(root->right);}// Driver Codeint main(){ struct node* root = newNode('1'); root->left = newNode('7'); root->right = newNode('3'); root->left->left = newNode('4'); root->left->right = newNode('5'); root->right->right = newNode('6'); doubleOrderTraversal(root); return 0;} |
Java
// Java program to implement// the above approachclass GFG{// Node Structurestatic class node { char data; node left, right;};// Function to create new nodestatic node newNode(char ch){ // Allocate a new node in memory node n = new node(); n.data = ch; n.left = null; n.right = null; return n;}// Function to print Double Order traversalstatic void doubleOrderTraversal(node root){ if (root == null) return; // Print Node Value System.out.print(root.data + " "); // Traverse Left Subtree doubleOrderTraversal(root.left); // Print Node Value System.out.print(root.data + " "); // Traverse Right SubTree doubleOrderTraversal(root.right);}// Driver Codepublic static void main(String[] args){ node root = newNode('1'); root.left = newNode('7'); root.right = newNode('3'); root.left.left = newNode('4'); root.left.right = newNode('5'); root.right.right = newNode('6'); doubleOrderTraversal(root);}}// This code is contributed by gauravrajput1 |
Python3
# Python3 program to implement# the above approach# Node Structureclass Node: # Initialise new node def __init__(self, ch): self.data = ch self.left = None self.right = None# Function to print Double Order traversaldef doubleOrderTraveersal(root): if not root: return # Print node value print(root.data, end = " ") # Traverse left subtree doubleOrderTraveersal(root.left) # Print node value print(root.data, end = " ") # Traverse right subtree doubleOrderTraveersal(root.right)# Driver codeif __name__ == '__main__': root = Node(1) root.left = Node(7) root.right = Node(3) root.left.left = Node(4) root.left.right = Node(5) root.right.right = Node(6) doubleOrderTraveersal(root)# This code is contributed by Shivam Singh |
C#
// C# program to implement// the above approachusing System;class GFG{// Node Structureclass node { public char data; public node left, right;};// Function to create new nodestatic node newNode(char ch){ // Allocate a new node in memory node n = new node(); n.data = ch; n.left = null; n.right = null; return n;}// Function to print Double Order traversalstatic void doubleOrderTraversal(node root){ if (root == null) return; // Print Node Value Console.Write(root.data + " "); // Traverse Left Subtree doubleOrderTraversal(root.left); // Print Node Value Console.Write(root.data + " "); // Traverse Right SubTree doubleOrderTraversal(root.right);}// Driver Codepublic static void Main(String[] args){ node root = newNode('1'); root.left = newNode('7'); root.right = newNode('3'); root.left.left = newNode('4'); root.left.right = newNode('5'); root.right.right = newNode('6'); doubleOrderTraversal(root);}}// This code is contributed by gauravrajput1 |
Javascript
<script>// Javascript program to implement// the above approach// Node Structureclass node { constructor() { this.data = 0; this.left = null; this.right = null; }};// Function to create new nodefunction newNode(ch){ // Allocate a new node in memory var n = new node(); n.data = ch; n.left = null; n.right = null; return n;}// Function to print Double Order traversalfunction doubleOrderTraversal(root){ if (root == null) return; // Print Node Value document.write(root.data + " "); // Traverse Left Subtree doubleOrderTraversal(root.left); // Print Node Value document.write(root.data + " "); // Traverse Right SubTree doubleOrderTraversal(root.right);}// Driver Codevar root = newNode('1');root.left = newNode('7');root.right = newNode('3');root.left.left = newNode('4');root.left.right = newNode('5');root.right.right = newNode('6');doubleOrderTraversal(root);</script> |
1 7 4 4 7 5 5 1 3 3 6 6
Time Complexity: O(N)
Auxiliary Space: O(1)
Ready to dive in? Explore our Free Demo Content and join our DSA course, trusted by over 100,000 neveropen!

… [Trackback]
[…] Information on that Topic: geeksforgeeks.org/double-order-traversal-of-a-binary-tree/ […]
… [Trackback]
[…] Find More Information here to that Topic: geeksforgeeks.org/double-order-traversal-of-a-binary-tree/ […]
… [Trackback]
[…] Find More Information here to that Topic: geeksforgeeks.org/double-order-traversal-of-a-binary-tree/ […]
… [Trackback]
[…] Find More on that Topic: geeksforgeeks.org/double-order-traversal-of-a-binary-tree/ […]