算法笔记 --- Tree Travers

#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;
}
原文地址:https://www.cnblogs.com/zhongzhiqiang/p/5791072.html