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

按之字形顺序打印二叉树

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

1 思路

累计耗时超过1小时!!

  • 請站在模板的肩上
  • 自己尝试利用双端队列的代码,其实可以用普通队列
  • 【要点】主要是内部vector插入的时候,选择尾部更新,还是头部更新的问题,这样就不用排序了,
  • 难点不是queque pop, 而是在内部数据插入的维护上;

难点的地方 2处

如图圈主的地方 alt

vector操作

alt

层次遍历 /BFS模板的认识

alt

更多的参考https://blog.nowcoder.net/n/b169fcd8c60b446eae5869a319a3c7ef

2 code

//自己尝试利用双端队列的代码,其实可以用普通队列
//主要是内部vector插入的时候,选择尾部更新,还是头部更新的问题,这样就不用排序了

/*
struct TreeNode {
    int val;
    struct TreeNode *left;
    struct TreeNode *right;
    TreeNode(int x) :
            val(x), left(NULL), right(NULL) {
    }
};
*/
#include <deque>
class Solution {
public:
    vector<vector<int> > Print(TreeNode* pRoot) {
        int level = 1;

        vector<vector<int> > finalV;
        if(!pRoot){
            return finalV;
        }
        deque<TreeNode*> dq;//dq(pRoot);
        dq.push_back(pRoot);
        
        int curr = 0;
        TreeNode* currNode = NULL;
        while( !dq.empty()){
            int sz = dq.size();//每一层数目
            vector<int> innerV;
            
            while( sz--){
                
                //if( level%2 ==1){
                    currNode = dq.front();
                    curr = dq.front()->val;
                    dq.pop_front();
                    
                //}else{
//                     currNode = dq.back();
//                     curr = dq.back()->val;
//                     dq.pop_back();
//                 }
                if( level%2 ==1){
                  innerV.push_back(curr);
                }else{
                  innerV.insert(innerV.begin(),curr);//similar to push front
                }

                if(currNode->left)
                    dq.push_back(currNode->left);
                if(currNode->right)
                    dq.push_back(currNode->right);
            }
            level++;
            finalV.push_back(innerV);
        }
        
        return finalV;
    }
    
};

全部评论

相关推荐

程序员牛肉:主要是因为小厂的资金本来就很吃紧,所以更喜欢有实习经历的同学。来了就能上手。 而大厂因为钱多,实习生一天三四百的就不算事。所以愿意培养你,在面试的时候也就不在乎你有没有实习(除非是同级别大厂的实习。) 按照你的简历来看,同质化太严重了。项目也很烂大街。 要么换项目,要么考研。 你现在选择工作的话,前景不是很好了。
点赞 评论 收藏
分享
05-29 22:11
门头沟学院 Java
Elastic90:抛开学历造假不谈,这公司的招聘需求也挺怪的,Java开发还要求你有图文识别、移动端开发和c++的经验,有点逆天了。
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
昨天 17:30
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务