题解 | #按之字形顺序打印二叉树#

按之字形顺序打印二叉树

http://www.nowcoder.com/practice/91b69814117f4e8097390d107d2efbe0

重点,通过奇数偶数交替的方式打印出来,//位运算判断奇数还是偶数,然后直接使用list的reverse操作。以及按照层遍历的模板,

/*
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> > results;
        if(!pRoot){
            return results;
        }


        stack<TreeNode* > mid_result;
        queue<TreeNode* > Q;

        mid_result.push(pRoot);
        Q.push(pRoot);

        int level = 0;

        while(!Q.empty()){

            int size = Q.size();        
            vector<int> result;

            while(size--){

                TreeNode* tmp = Q.front();
                Q.pop();
                result.emplace_back(tmp->val);

                if(tmp->left){
                    Q.push(tmp->left);
                } 
                if(tmp->right){
                    Q.push(tmp->right);
                }

            }
            //重点,通过奇数偶数交替的方式打印出来
            level++;
            if(!(level&1)){ //位运算判断奇数还是偶数,然后直接使用list的revers操作。
                reverse(result.begin(),result.end());
            }
            results.push_back(result);

        }


        return results;


    }

};
算法解析 文章被收录于专栏

这里主要是算法岗的自我思路总结

全部评论

相关推荐

02-10 21:39
Java
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务