按之字型打印二叉树

include

class Solution {
public:
vector<vector<int> > Print(TreeNode* pRoot) {</int>

    vector<int> resRow;
    vector<vector<int> >res;

    if(!pRoot)
        return res;

    stack<TreeNode*> sta[2];  //两个栈
    int current = 1;
    int next = 0;

    sta[current].push(pRoot);  //先往当前栈内存入根节点
    while(!sta[current].empty()) //当当前栈非空时进行循环
    {
        if(current)  //当当前栈的下标为奇数时,先向下一层的栈内存放左孩子
        {
            if(sta[current].top()->left)
            sta[next].push(sta[current].top()->left);
            if(sta[current].top()->right)
            sta[next].push(sta[current].top()->right);
        }
        else{  //若为偶数,每个结点先存放右孩子
            if(sta[current].top()->right)
            sta[next].push(sta[current].top()->right);
            if(sta[current].top()->left)
            sta[next].push(sta[current].top()->left);
        }
        //在当前栈出栈
        resRow.push_back(sta[current].top()->val);
        sta[current].pop();  //当前元素出栈

        if(sta[current].empty()) //当当前栈为空时
        {
            current = 1-current;  //调换两个栈,next变成当前栈了
            next = 1-next;
            res.push_back(resRow);  //当当前栈全部存入resRow之后再整体存入到二维结果数组中
            resRow.clear();
        }
    }
    return res;
}

};

全部评论

相关推荐

不愿透露姓名的神秘牛友
07-08 13:05
点赞 评论 收藏
分享
程序员小白条:主要没亮点,项目也是网上的,平平无奇,那只能海投了,奖项总得有一些,然后就是现在最好是前后端都会,自己能做项目并且运维的,要么找星球项目改改,要么找个开源项目改改,自己能拓展功能才是主要的,跟做效率很低很低
点赞 评论 收藏
分享
认真搞学习:28小登的建议,投算法岗不要写什么物理竞赛,互联网+,多写点项目,用什么算法做了什么。还有本科算法是不可能的开发你这个也没有项目啊
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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