JZ59 按之字形顺序打印二叉树

题目描述

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

思路

创建两个栈分别存放奇数行的数和偶数行的数:
(1)一开始先将根节点放入栈1;
(2)然后开始从栈1中取数,取一个就把它的左、右分别放到栈2里面去,直到它为空;
(3)然后开始从栈2中取数,取一个就把它的右、左分别放到栈1里面去,直到它为空;
(4)重复上面(3)(4)步,直到两个栈全都为空
图片说明

还是需要注意!!!:只要碰到取左/右的一定要判断一下它的左右是否为空!!!

代码

class Solution {
public:
    vector<vector<int> > Print(TreeNode* pRoot) {
        vector<vector<int>> res;
        TreeNode* pNode;
        vector<int> res_temp;
        stack<TreeNode*> stack1;//存奇数行的栈
        stack<TreeNode*> stack2;//存偶数行的栈
        stack1.push(pRoot);
        if(pRoot==NULL)
            return res;
        while(!stack1.empty()||!stack2.empty())
        {
            while(!stack1.empty())
            {
                pNode=stack1.top();
                res_temp.push_back(pNode->val);
                if(pNode->left!=NULL)
                    stack2.push(pNode->left);
                if(pNode->right!=NULL)
                    stack2.push(pNode->right);
                stack1.pop();
            }
            if(!res_temp.empty())
                res.push_back(res_temp);
            res_temp.clear();
            while(!stack2.empty())
            {
                pNode=stack2.top();
                res_temp.push_back(pNode->val);
                if(pNode->right!=NULL)
                    stack1.push(pNode->right);
                if(pNode->left!=NULL)
                    stack1.push(pNode->left);
                stack2.pop();
            }
            if(!res_temp.empty())
                res.push_back(res_temp);
            res_temp.clear();
        }
        return res;
    }

};
全部评论

相关推荐

门口唉提是地铁杀:之前b站被一个游戏demo深深的吸引了。看up主页发现是个初创公司,而且还在招人,也是一天60。二面的时候要我做一个登录验证和传输文件两个微服务,做完要我推到github仓库,还要我加上jaeger和一堆运维工具做性能测试并且面试的时候投屏演示。我傻乎乎的做完以后人家跟我说一句现在暂时不招人,1分钱没拿到全是白干
你的秋招第一场笔试是哪家
点赞 评论 收藏
分享
05-26 10:24
门头沟学院 Java
qq乃乃好喝到咩噗茶:其实是对的,线上面试容易被人当野怪刷了
找工作时遇到的神仙HR
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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