zoukankan      html  css  js  c++  java
  • 剑指32-3 从上到下打印二叉树

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

    例如:
    给定二叉树: [3,9,20,null,null,15,7],

    3
    /
    9 20
    /
    15 7
    返回其层次遍历结果:

    [
    [3],
    [20,9],
    [15,7]
    ]

    本题要分行打印,所以需要提前记录每行的长度。因为要之字形,所以需要2个栈,分别处理偶数行和奇数行。如果当前是奇数行(root视为第一行),就先压入左子树再压入右子树;否则就先压入右子树再压入左子树。

    这里用even来标记是奇数行还是偶数行,配合stack数组可以简化代码。

     1 /**
     2  * Definition for a binary tree node.
     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>> levelOrder(TreeNode* root) {
    13         if(root==nullptr)
    14             return {};
    15         vector<vector<int>> ret;
    16         vector<int> partial_ret;
    17         stack<TreeNode*> stackTreenodes[2];
    18         int even=1;
    19         TreeNode* curptr=root;
    20         stackTreenodes[1-even].push(curptr);
    21         while(!stackTreenodes[1-even].empty()){
    22             even=1-even;
    23             int size=stackTreenodes[even].size();
    24             while(size!=0){
    25                 curptr=stackTreenodes[even].top();
    26                 stackTreenodes[even].pop();
    27                 size--;
    28                 partial_ret.push_back(curptr->val);
    29                 if(even){
    30                     if(curptr->right!=nullptr)
    31                         stackTreenodes[1-even].push(curptr->right);
    32                     if(curptr->left!=nullptr)
    33                         stackTreenodes[1-even].push(curptr->left);
    34                 }
    35                 else{
    36                     if(curptr->left!=nullptr)
    37                         stackTreenodes[1-even].push(curptr->left); 
    38                     if(curptr->right!=nullptr)
    39                         stackTreenodes[1-even].push(curptr->right);
    40                 }
    41             }
    42             ret.push_back(partial_ret);
    43             partial_ret.clear();
    44         }
    45         return ret;
    46     }
    47 };
  • 相关阅读:
    string截断
    winform截屏
    android自定义tabhost,tabcontent用intent获得
    Eclipse引入jar包的三种方式
    jquery dataTable的学习
    jquery datatable 参数
    Sql Server中三种字符串合并方法的性能比较
    sql表设计
    开发守则
    App Store2016年最新审核规则
  • 原文地址:https://www.cnblogs.com/rookiez/p/13234529.html
Copyright © 2011-2022 走看看