zoukankan      html  css  js  c++  java
  • 剑指offer 按之字型顺序打印二叉树

    题目描述

    请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。
     
    使用两个栈进行存储,我们在打印某一行节点的时候,需要将下一行的节点保存到相应的栈中,如果当前打印奇数层,那么先保存左子节点,再保存右子节点;
    如果我们当前打印的偶数层,那么先保存右子节点,再保存左子节点。
    注意循环退出条件。
    /*
    struct TreeNode {
        int val;
        struct TreeNode *left;
        struct TreeNode *right;
        TreeNode(int x) :
                val(x), left(NULL), right(NULL) {
        }
    };
    */
    class Solution {
    public:
        vector<vector<int> > Print(TreeNode* pRoot) {
            stack<TreeNode*> odd;//先左后右
            stack<TreeNode*> even;//先右后左
            vector<vector<int> > result;
            if(pRoot == nullptr){
                return result;
            }
            TreeNode* p = pRoot;
            int flag = 1;
            odd.push(p);
            while(!odd.empty() || !even.empty()){
                vector<int> tmp;
                if(flag % 2){//当前奇数层
                    while(!odd.empty()){
                        p = odd.top();
                        tmp.push_back(p -> val);
                        odd.pop();
                        if(p -> left != nullptr){
                            even.push(p -> left);
                        }
                        if(p -> right != nullptr){
                            even.push(p -> right);
                        }
                    }
                    result.push_back(tmp);
                    ++flag;
                }
                else{//当前偶数层
                    while(!even.empty()){
                        p = even.top();
                        tmp.push_back(p -> val);
                        even.pop();
                        if(p -> right != nullptr){
                            odd.push(p -> right);
                        }
                        if(p -> left != nullptr){
                            odd.push(p -> left);
                        }
                        
                    }
                    result.push_back(tmp);
                    ++flag;
                }
            }
            return result;
        }
        
    };
     
     
  • 相关阅读:
    javascript 对象只读
    异步IO
    模板
    Web框架
    WSGI接口
    web开发发展历程
    python函数中的参数类型
    学习网址
    python inspect模块
    详解python的装饰器decorator
  • 原文地址:https://www.cnblogs.com/dingxiaoqiang/p/7513248.html
Copyright © 2011-2022 走看看