zoukankan      html  css  js  c++  java
  • 程序员面试金典--按之字形顺序打印二叉树

    程序员面试金典--按之字形顺序打印二叉树

    题目描述

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

    使用 bfs 和 depth 相结合。

    /*
    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) {
            vector<vector<int> > ans; 
            if(pRoot == NULL) {
                return ans; 
            }
            TreeNode *pt = pRoot, *cur_s;
            
            queue<TreeNode*> stk;
            queue<int> skd;
            
            stk.push( pt ); 
            skd.push( 1 ); 
            
            int cur_tmp, depth = 1; 
            vector<int> tmp;
            
            while(!stk.empty()){
                cur_s = stk.front();  stk.pop(); 
                cur_tmp = skd.front();   skd.pop();  
                
                if(cur_tmp != depth){
                    if(depth%2 == 0){
                        reverse(tmp.begin(), tmp.end()); 
                    }
                    ans.push_back(tmp); 
                    tmp.clear(); 
                    depth = cur_tmp; 
                }
                tmp.push_back( cur_s->val ); 
                
                if( cur_s->left ){
                    stk.push( cur_s->left ); 
                    skd.push( cur_tmp + 1 ); 
                }
                if( cur_s->right ){
                    stk.push( cur_s->right ); 
                    skd.push( cur_tmp + 1 ); 
                }
            }
            if(tmp.size() > 0){
                if(depth%2 == 0){
                    reverse(tmp.begin(), tmp.end()); 
                }
                ans.push_back( tmp ); 
            }
            
            return ans; 
        }
    };
    

      

  • 相关阅读:
    jQuery里使用setinterval
    关于java以及JavaScript或者更多的语言中Data类的问题
    重置input checked
    利用CSS变量实现悬浮效果
    vue 可编辑表格组件
    js 可拉伸表格
    vue 自定义拖拽指令
    vue 表格导出excel
    vue 侧边导航栏递归显示
    RUP(Rational Unified Process)统一软件过程概述
  • 原文地址:https://www.cnblogs.com/zhang-yd/p/7285276.html
Copyright © 2011-2022 走看看