按之字形顺序打印二叉树

按之字形顺序打印二叉树

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

请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推
用c++的也太少了吧,补个用双栈方法的c++代码
class Solution {
public:
    vector<vector<int> > Print(TreeNode* pRoot) {
        vector<vector<int>> ans;
        if(!pRoot) return ans;
        stack<TreeNode*> stack1;
        stack<TreeNode*> stack2;
        stack1.push(pRoot);
        while(!stack1.empty() || !stack2.empty()){
            vector<int> tmp_ans1;
            while(!stack1.empty()){//出栈顺序是从左到右时,将子节点也按从左到右的顺序压入stack2,这样stack2的出栈顺序就是从右往左
                TreeNode* tmp = stack1.top();
                stack1.pop();
                tmp_ans1.push_back(tmp->val);
                if(tmp->left){
                    stack2.push(tmp->left);
                }
                if(tmp->right){
                    stack2.push(tmp->right);
                }
            }
            if(!tmp_ans1.empty()) ans.push_back(tmp_ans1);
            tmp_ans1.clear();
            while(!stack2.empty()){//出栈顺序是从右到左时,将子节点也按照从右到左的顺序压住stack1,这样stack1的出栈顺序就是从左往右
                TreeNode* tmp = stack2.top();
                stack2.pop();
                tmp_ans1.push_back(tmp->val);
                if(tmp->right) stack1.push(tmp->right);
                if(tmp->left) stack1.push(tmp->left);
            }
            if(!tmp_ans1.empty()) ans.push_back(tmp_ans1);
        }
        return ans;
    }
    
};



全部评论

相关推荐

不愿透露姓名的神秘牛友
06-27 14:11
很喜欢小米的新车,校招薪资每月22k,攒多久能买?
测试糕手手:别看工资,先看现金流存款。有50W存款以上再考虑,车是消耗品,选适合自己的重要。你有钱就当我没说过
点赞 评论 收藏
分享
点赞 评论 收藏
分享
流浪的神仙:无恶意,算法一般好像都得9硕才能干算法太卷啦
点赞 评论 收藏
分享
06-26 10:08
门头沟学院 C++
北京Golang实习,一个月4700,吃住都不报,公司位置在海淀。请问友友怎么看呢?如果要租房的话有什么建议吗
码农索隆:租房肯定是合租了,剩下的钱,差不多够正常吃饭了,看看能不能学到东西吧
点赞 评论 收藏
分享
评论
3
1
分享

创作者周榜

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