#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; }