zoukankan      html  css  js  c++  java
  • 【leetcode】Binary Tree Zigzag Level Order Traversal

    Binary Tree Zigzag Level Order Traversal

    Given a binary tree, return the zigzag level order traversal of its nodes' values. (ie, from left to right, then right to left for the next level and alternate between).

    For example:
    Given binary tree {3,9,20,#,#,15,7},

        3
       / 
      9  20
        /  
       15   7
    

    return its zigzag level order traversal as:

    [
      [3],
      [20,9],
      [15,7]
    ]
    
     
     
    利用队列,进行层次遍历
    根据层的奇偶性,判断是否需要翻转
     
     
     1 /**
     2  * Definition for binary tree
     3  * struct TreeNode {
     4  *     int val;
     5  *     TreeNode *left;
     6  *     TreeNode *right;
     7  *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
     8  * };
     9  */
    10 class Solution {
    11 public:
    12     vector<vector<int> > zigzagLevelOrder(TreeNode *root) {
    13        
    14         vector<vector<int> > result;
    15         queue<TreeNode*> q;
    16        
    17         if(root==NULL) return result;
    18         q.push(root);
    19        
    20         int numNode=1;
    21        
    22         bool isOdd=true;
    23        
    24         while(!q.empty())
    25         {
    26             vector<int> cur;
    27             int nextLevelCount=0;
    28             for(int i=0;i<numNode;i++)
    29             {
    30                 TreeNode *node=q.front();
    31                 cur.push_back(node->val);
    32                 q.pop();
    33                 if(node->left!=NULL)
    34                 {
    35                     q.push(node->left);
    36                     nextLevelCount++;
    37                 }
    38                
    39                 if(node->right!=NULL)
    40                 {
    41                     q.push(node->right);
    42                     nextLevelCount++;
    43                 }
    44             }
    45            
    46             if(isOdd)
    47             {
    48                 result.push_back(cur);
    49             }
    50             else
    51             {
    52                 reverse(cur.begin(),cur.end());
    53                 result.push_back(cur);
    54             }
    55            
    56             isOdd=!isOdd;
    57            
    58             numNode=nextLevelCount;
    59         }
    60        
    61         return result;
    62        
    63     }
    64 };
  • 相关阅读:
    Linux下查看系统版本号信息的方法(转载)
    tomcat 启动超级慢
    新生代老年代GC组合
    GC 提前晋升
    Mysql 锁技术要点【转载】
    第39天:字符串连接、截取操作
    第38天:运算符、字符串对象常用方法
    第37天:小米手机图片展示
    第36天:倒计时:发动短信验证、跳转页面、关闭广告
    第35天:时钟效果
  • 原文地址:https://www.cnblogs.com/reachteam/p/4231946.html
Copyright © 2011-2022 走看看