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

按之字形顺序打印二叉树

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

数据结构 双端队列 C++
一端受限的队列无法解决反向输出问题,那就双端嘛。思路同层次遍历一样,用r来记录当前层最后一个入队节点,时间复杂度为O(n),n为树的节点数;空间复杂度为O(n)。

vector<vector<int> > Print(TreeNode* pRoot) {
        TreeNode* r = pRoot; //层次遍历,记录当前层最后一个入队节点
        deque<TreeNode*> q;//双端队列
        vector<vector<int>> ans;
        if(pRoot==NULL)
            return ans;
        q.push_front(pRoot);
        vector<int> floor; //每层节点值的集合
        for(int i=0;!q.empty();){
            TreeNode* tmp;
            if(i%2==0){
                tmp=q.front();
                floor.push_back(tmp->val);
                if(tmp->left!=NULL)
                    q.push_back(tmp->left);
                if(tmp->right!=NULL)
                    q.push_back(tmp->right);
                q.pop_front();
                if(r==tmp){ //扫描到本层最后一个
                    ans.push_back(floor);
                    floor.clear();
                    r=q.front();
                    i++;
                }
            }
            else{
                tmp=q.back(); 
                floor.push_back(tmp->val);
                if(tmp->right!=NULL)
                    q.push_front(tmp->right);
                if(tmp->left!=NULL)
                    q.push_front(tmp->left);
                q.pop_back();
                if(r==tmp){
                    ans.push_back(floor);
                    floor.clear();
                    r=q.back();
                    i++;
                }
            }

        }
        return ans;
    }
全部评论

相关推荐

手撕没做出来是不是一定挂
Chrispp3:不会,写出来也不一定过
点赞 评论 收藏
分享
object3:开始给部分🌸孝子上人生第一课了
点赞 评论 收藏
分享
11-09 12:17
清华大学 C++
out11Man:小丑罢了,不用理会
点赞 评论 收藏
分享
研一开学九月份速成的Java,项目是苍穹外卖和黑马点评,算法基础不好,八股文较为熟练,想找份小厂日常实习,希望牛友们给点意见,蟹蟹啦
求offer的花生米很聪敏:三个月学了这么多?spring springmvc mybatis springboot jvm juc,还做完了两个项目,还熟悉八股,会点算法。卧槽,我该反思了。我暑假开始的,就做了外卖,spring springmvc boot 那些原理好多都忘了,还在刷 jvm 视频,八股和算法也没开始
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务