#include <iostream>
#include <vector>
#include <queue>
using namespace std;
struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
TreeNode(int x) :
val(x), left(NULL), right(NULL) {
}
};
class TreePrinter {
public:
vector<vector<int> > printTree(TreeNode* root) {
// write code here
vector< vector<int> > res_print;
if(!root){
return res_print;
}
queue<TreeNode> node_queue;
vector<int> node_print_tmp;
node_queue.push(*root);
TreeNode last(0), nlast(0);
last = *root;
do{
TreeNode node_tmp = node_queue.front();
node_queue.pop();
node_print_tmp.push_back(node_tmp.val);
cout<<"node "<<node_tmp.val<<" is added."<<endl;
if(node_tmp.left){
node_queue.push(*node_tmp.left);
nlast = *(node_tmp.left);
}
// cout<<"last: "<<last.val<<"# nlast: "<<nlast.val<<endl;
if(node_tmp.right){
node_queue.push(*node_tmp.right);
nlast = *(node_tmp.right);
}
// cout<<"last: "<<last.val<<"# nlast: "<<nlast.val<<endl;
if(node_tmp.val == last.val){
cout<<"###"<<endl;
cout<<"node_print_tmp:"<<endl;
for(int i = 0; i < node_print_tmp.size(); i++){
cout<<node_print_tmp.at(i)<<" ";
}
cout<<endl;
res_print.push_back(node_print_tmp);
node_print_tmp.clear();
last = nlast;
}
// cout<<"last: "<<last.val<<"# nlast: "<<nlast.val<<endl;
}while(!node_queue.empty());
return res_print;
}
};
int main()
{
TreeNode node0(0), node1(1), node2(2), node3(3), node4(4);
TreeNode node5(5), node6(6), node7(7), node8(8), node9(9);
TreeNode node10(10), node11(11), node12(12), node13(13), node14(14), node15(15);
node0.left = &node1, node0.right = &node2;
node1.left = &node3, node1.right = &node4;
node2.left = &node5, node2.right = &node6;
node3.left = &node7, node3.right = &node8;
node4.left = &node9;
TreePrinter printerTree;
vector< vector<int> > res = printerTree.printTree(&node0);
cout<<"res:"<<endl;
for(int i = 0; i < res.size(); i++){
for(int j = 0; j < res.at(i).size(); j++){
cout<<res.at(i).at(j)<<" ";
}
cout<<endl;
}
return 0;
}