zoukankan      html  css  js  c++  java
  • [Leetcode 95] 103 Binary Tree Zigzag Level Order Traversal

    Problem:

    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]
    ]

    Analysis:

    A little change to the original level-order reaversal code. Add a zz flag to indicate whether or not reverse the current level's elements.

    Remember that after exit the while loop, an extra push_back operation is needed !

    Code:

     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         // Start typing your C/C++ solution below
    14         // DO NOT write int main() function
    15         vector<vector<int> > res;
    16         
    17         if (root == NULL)
    18             return res;
    19         
    20         vector<int> l;
    21         
    22         queue<TreeNode*> q;
    23         q.push(root);
    24         
    25         TreeNode *senti = new TreeNode(-1);
    26         senti->left = senti->right = NULL;
    27         q.push(senti);
    28         
    29         bool zz = false;
    30         
    31         while (q.size() != 1) {
    32             TreeNode *n = q.front();
    33             q.pop();
    34             
    35             if (n == senti) { // get the sentinal node
    36                 if (zz) reverse(l.begin(), l.end());
    37                 
    38                 res.push_back(l);
    39                 q.push(n);
    40                 zz = !zz;
    41                 l.clear();
    42             } else {
    43                 l.push_back(n->val);
    44             
    45                 if (n->left != NULL) q.push(n->left);
    46                 if (n->right != NULL) q.push(n->right);
    47             }
    48         }
    49         if (zz) reverse(l.begin(), l.end());
    50         res.push_back(l);
    51         
    52         return res;
    53     }
    54 };
    View Code
  • 相关阅读:
    滑动条使用
    jquery日历练习
    JQuery 教程
    JS获取各种宽度、高度的简单介绍
    如何获取元素位置
    DOM练习
    DOM
    函数
    假期练习
    Uva 253 Cube painting
  • 原文地址:https://www.cnblogs.com/freeneng/p/3220982.html
Copyright © 2011-2022 走看看