#ifndef tree_hpp
#define tree_hpp
class TreeNode {
public:
int val;
TreeNode *left;
TreeNode *right;
TreeNode();
TreeNode(int x);
};
class Tree {
public:
TreeNode* nodesArray;
int total_count;
Tree(int[], int);
~Tree();
TreeNode* getRoot();
};
void print(TreeNode*);
#endif /* tree_hpp */
#include "tree.hpp"
#include <iostream>
#include <queue>
using namespace std;
TreeNode::TreeNode():val(-1),left(NULL),right(NULL) {}
TreeNode::TreeNode(int x) : val(x), left(NULL), right(NULL) {}
Tree::Tree(int arr[], int count) : total_count(count) {
nodesArray=new TreeNode[count];
for (int i=0;i<count;i++)
nodesArray[i].val=arr[i];
for (int k=1;k<count;k++) {
if (nodesArray[k].val==-1)//should be empty child
continue;
if (k%2==0)
nodesArray[k/2-1].right=&nodesArray[k];
else
nodesArray[k/2].left=&nodesArray[k];
}
}
Tree::~Tree() {
delete[] nodesArray;
}
TreeNode* Tree::getRoot() {
return &nodesArray[0];
}
void print(TreeNode* root) {
if (!root)
return;
queue<TreeNode*> buffer;
buffer.push(root);
int current_level_count=1, next_level_count=0;
while (!buffer.empty()) {
TreeNode* current=buffer.front();
buffer.pop();
if (current)
cout << current->val << ' ';
else
cout << "null ";
--current_level_count;
if (current) {
buffer.push(current->left);
buffer.push(current->right);
next_level_count+=2;
}
if (current_level_count==0) {
cout << endl;
current_level_count=next_level_count;
next_level_count=0;
}
}
}