zoukankan      html  css  js  c++  java
  • 按之字形顺序打印二叉树

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

    这道题也是二叉树的层次遍历,但要求按行打印,并且是之字形的,需要定义一个flag,确定这一行的打印顺序是从左到右还是从右至左。每行打印完,只要将flag取反,就可以改变下一行的打印顺序。

    怎样按行打印呢?我们可以定义一个队列queue和一个数组level,队列queue存树的结点,数组level存每一行的值。在遍历每一行的循环开始前,先用一个变量len记录队列里的结点数目,这样就可以区分之后添加的儿子结点啦。尽管队列queue还有结点,但已经遍历了len个结点了,说明此时队列queue里都是新扩展的儿子结点了。

    c++代码如下:

     1 /*
     2 struct TreeNode {
     3     int val;
     4     struct TreeNode *left;
     5     struct TreeNode *right;
     6     TreeNode(int x) :
     7             val(x), left(NULL), right(NULL) {
     8     }
     9 };
    10 */
    11 class Solution {
    12 public:
    13     vector<vector<int> > Print(TreeNode* pRoot) {
    14         vector<vector<int>> res;
    15         if(!pRoot) return res;
    16  
    17         queue<TreeNode*> q;
    18         q.push(pRoot);
    19         bool rev = false;
    20 
    21         while(q.size()){
    22             int len = q.size();
    23             vector<int> level;
    24             for(int i = 0; i < len; i++){
    25                 auto t = q.front();
    26                 level.push_back(t->val);
    27                 if(t->left) q.push(t->left);
    28                 if(t->right) q.push(t->right);
    29                 q.pop();
    30             }
    31             if(rev) reverse(level.begin(), level.end());
    32             rev = !rev;
    33             res.push_back(level);
    34         }
    35         return res;
    36     }
    37 };
  • 相关阅读:
    城市承灾体脆弱性和易损性的影响因素
    《风暴潮、海浪、海啸和海冰灾害应急预案》
    承灾体
    ArcGIS数据存储的方式
    ArcGIS几种数据格式2
    ArcGIS几种数据格式
    【ArcGIS】文件地理数据库,个人地理数据库与ArcSDE的局别
    dojo事件绑定
    Spark最简安装
    Spark 概述
  • 原文地址:https://www.cnblogs.com/hellosnow/p/12094329.html
Copyright © 2011-2022 走看看