/**
* This is an example for how to use a binary tree.
*/
#include <bits/stdc++.h>
using namespace std;
class TreeNode{
public:
int data;
TreeNode * left, * right;
};
class BinaryTree{
public:
BinaryTree()
{
}
TreeNode * newNode(int val)
{
TreeNode * mynode = new TreeNode();
mynode->data = val;
mynode->left = nullptr;
mynode->right = nullptr;
return mynode;
}
TreeNode * insertNode(TreeNode * root, int val)
{
if(root == nullptr)
return newNode(val);
if (val < root->data)
root->left = insertNode(root->left, val);
else
root->right = insertNode(root->right, val);
return root;
}
void inorder(TreeNode *root)
{
if (root != nullptr)
{
inorder(root->left);
cout<<root->data<<",";
inorder(root->right);
}
}
void preorder(TreeNode *root)
{
if (root != nullptr)
{
cout<<root->data<<",";
preorder(root->left);
preorder(root->right);
}
}
void postorder(TreeNode *root)
{
if (root != nullptr)
{
postorder(root->left);
postorder(root->right);
cout<<root->data<<",";
}
}
};
int main()
{
BinaryTree mytree = BinaryTree();
TreeNode * root = nullptr;
root = mytree.insertNode(root,50);
mytree.insertNode(root,30);
mytree.insertNode(root,20);
mytree.insertNode(root,40);
mytree.insertNode(root,70);
mytree.insertNode(root,60);
mytree.insertNode(root,80);
cout<<"inorder"<<endl;
mytree.inorder(root);
cout<<endl;
cout<<"preorder"<<endl;
mytree.preorder(root);
cout<<endl;
cout<<"postorder"<<endl;
mytree.postorder(root);
cout<<endl;
return 0;
}