剑指offer-按之字形顺序打印二叉树

2016/05/24 C和C++基础

题目描述

请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。

#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 Solution {
public:
    vector<vector<int> > Print(TreeNode* pRoot) {
        vector<vector<int> > vec;
        if(pRoot==NULL) return vec;
        queue<TreeNode*> q;
        q.push(pRoot);
        bool m=true;
        while(!q.empty()){
            int len=q.size();
            vector<int> temp;
            for(int i=0;i<len;i++){
                TreeNode *t=q.front();
                if(t->left!=NULL)
                    q.push(t->left);
                if(t->right!=NULL)
                    q.push(t->right);
                temp.push_back(t->val);
                q.pop();
            }
            int s=temp.size();
            if(s!=0){
            	if(m==true){
                	vec.push_back(temp);
                	m=false;
            	}else{
                	vector<int> tp;
                	for(int i=s-1;i>=0;i--)
                    	tp.push_back(temp[i]);
                	vec.push_back(tp);
                	m=true;
            	}
            }
        }
        return vec;
    }
};

Search

    Post Directory