I created Binary Tree (Abstract data type) using template .
#include <bits/stdc++.h>
using namespace std;
template <typename T>class BinaryTree{
public:
T data;
BinaryTree*first;
BinaryTree*second;
BinaryTree(){
data=-1;
first=nullptr;
second=nullptr;
}
BinaryTree(T data){
this->data=data;
first=nullptr;
second=nullptr;
}
};
template <typename T>BinaryTree<T>*InputBinaryTree(){
cout<<"Enter root element : "<<endl;
T data;
cin>>data;
BinaryTree<T>*root=new BinaryTree<T>(data);
queue<BinaryTree<T>*>childrenholder;
childrenholder.push(root);
while(!childrenholder.empty()){
BinaryTree<T>*rooty=childrenholder.front();
cout<<"Enter first child of "<< rooty->data <<" : " <<endl;
T first;
cin>>first;
cout<<"Enter second child of "<< rooty->data <<" : " <<endl;
T second;
cin>>second;
if(first!=-1){
BinaryTree<T> * firsty=new BinaryTree<T>(first);
rooty->first=firsty;
childrenholder.push(firsty);
}
if(second!=-1){
BinaryTree<T> * secondy=new BinaryTree<T>(second);
rooty->second=secondy;
childrenholder.push(secondy);
}
childrenholder.pop();
}
return root;
}
template <typename T>void OutputBinaryTree(BinaryTree<T>*root){
cout<<root->data<<endl;
queue<BinaryTree<T>*>childrenholder;
childrenholder.push(root);
while(!childrenholder.empty()){
BinaryTree<T>*rooty=childrenholder.front();
BinaryTree<T>*firsty=rooty->first;
BinaryTree<T>*secondy=rooty->second;
if(firsty->data!=-1){
cout<<firsty->data<<" , ";
childrenholder.push(firsty);
}
if(secondy->data!=-1){
cout<<secondy->data<<" ";
childrenholder.push(secondy);
}
cout<<endl;
childrenholder.pop();
}
}
int main(){
BinaryTree<int>*root;
root=InputBinaryTree<int>();
OutputBinaryTree<int>(root);
}
class BinaryTree - Binary Tree class.
InputBinaryTree() - function used to get input for binary tree.
OutputBinaryTree() - function used to print binary tree.
childrenholder - queue is used to get element of children of a node.
I considered only Integer as Input. I got input for binary tree in level order wise and expect to print the binary tree in level order wise as well. I am getting error while executing OutputBinaryTree(). Especially on the looping statement of the OutputBinaryTree(). The looping statement doesn't seem pop the elements in childrenholder queue.
Input given:
Enter root element :
1
Enter first child of 1 :
2
Enter second child of 1 :
4
Enter first child of 2 :
-1
Enter second child of 2 :
3
Enter first child of 4 :
5
Enter second child of 4 :
6
Enter first child of 3 :
-1
Enter second child of 3 :
-1
Enter first child of 5 :
-1
Enter second child of 5 :
-1
Enter first child of 6 :
-1
Enter second child of 6 :
-1
-1 is assumed as no element is present at that node.
Output expected:
1
2 , 4
3 , 5 , 6
Output received:
1
2 , 4
exits.
using namespace std;statement is merely a bad habit.TreeandNodeclasses. LetNodebe only a simple holder of the data, and links to the left and right side, nothing more. Keep operations in theTreeclass. Also don't mix input into theTreeclass, it should be done outside of it, and then have a simpleinsertfunction which inserts one data object. And don't use pointers for theTreeobjects.datatype isT; you initialize it with-1in the default constructor, ifTis astd::string, so you would have a problem withdatainitialization.