Skip to main content

Flatten binary tree in order of postorder traversal in c++

Flattening tree nodes in order of postorder traversal

C++ program for Flatten binary tree in order of postorder traversal. Here more solutions.

// Include header file
#include <iostream>
using namespace std;
/*
  C++ program for
  Flatten binary tree in order of post-order traversal
*/
// Node of Binary Tree
class TreeNode
{
	public: 
    int data;
	TreeNode *left;
	TreeNode *right;
	TreeNode(int data)
	{
		// Set node value
		this->data = data;
		this->left = nullptr;
		this->right = nullptr;
	}
};
class BinaryTree
{
	public: 
    TreeNode *root;
	TreeNode *back;
	BinaryTree()
	{
		this->root = nullptr;
		this->back = nullptr;
	}
	// Recursive function
	// Display postorder view of binary tree
	void postOrder(TreeNode *node)
	{
		if (node != nullptr)
		{
			this->postOrder(node->left);
			this->postOrder(node->right);
			// Print node value
			cout << "  " << node->data;
		}
	}
	// This are flattening tree nodes in postorder from
	void transform(TreeNode *node)
	{
		if (node != nullptr)
		{
			// Recursive executing left and right subtree
			this->transform(node->left);
			this->transform(node->right);
			if (this->back == nullptr)
			{
				// This is first node of postorder traversal
				// Get first node of transform tree
				this->root = node;
			}
			else
			{
				// Next node
				this->back->right = node;
				// We taking only one direction
				this->back->left = nullptr;
			}
			this->back = node;
		}
	}
	// This are handling the request of
	// flatten tree nodes in post order from.
	void flattenNode()
	{
		if (this->root == nullptr)
		{
			// When empty tree
			return;
		}
		// Set back node
		this->back = nullptr;
		// Perform flatten operation
		this->transform(this->root);
		if (this->back != nullptr)
		{
			// Set last node of post order
			this->back->left = nullptr;
			this->back->right = nullptr;
		}
		this->back = nullptr;
	}
	// Display flatten elements of tree
	void showElement()
	{
		if (this->root == nullptr)
		{
			cout << "\n Empty Tree" << endl;
			return;
		}
		cout << "\n Flatten Tree Node in Postorder : " << endl;
		TreeNode *temp = this->root;
		// Iterate tree elements
		while (temp != nullptr)
		{
			// Display node value
			cout << "  " << temp->data;
			// Visit to next node
			temp = temp->right;
		}
	}
};
int main()
{
	// New tree
	BinaryTree *tree = new BinaryTree();
	/*
	    Construct Binary Tree
	    -----------------------
	           1
	          / \ 
	         /   \
	        6     8
	       / \   / \
	      2   3 7   5
	     /   /   \   \
	    9   4    -6   11
	*/
	// Add nodes
	tree->root = new TreeNode(1);
	tree->root->left = new TreeNode(6);
	tree->root->left->left = new TreeNode(2);
	tree->root->right = new TreeNode(8);
	tree->root->right->right = new TreeNode(5);
	tree->root->right->left = new TreeNode(7);
	tree->root->right->left->right = new TreeNode(-6);
	tree->root->left->right = new TreeNode(3);
	tree->root->left->right->left = new TreeNode(4);
	tree->root->left->left->left = new TreeNode(9);
	tree->root->right->right->right = new TreeNode(11);
	// Display tree elements
	cout << "\n Postorder Nodes : " << endl;
	tree->postOrder(tree->root);
	// Testing
	tree->flattenNode();
	// After transform
	tree->showElement();
	return 0;
}

Output

 Postorder Nodes :
  9  2  4  3  6  -6  7  11  5  8  1
 Flatten Tree Node in Postorder :
  9  2  4  3  6  -6  7  11  5  8  1




Comment

Please share your knowledge to improve code and content standard. Also submit your doubts, and test case. We improve by your feedback. We will try to resolve your query as soon as possible.

New Comment