zoukankan      html  css  js  c++  java
  • 剑指offer59:按之字形顺序打印二叉树:[[1], [3,2], [4,5,6,7]]

    1 题目描述

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

    2 思路和方法

    先给定一个二叉树的样式:

      输出的样式是:[[1], [3,2], [4,5,6,7]]。包含以下信息: (1)每一层所包含的树节点;(2)偶数层的树节点需倒序。

      思路: 面对要求的偶数层倒序,亦有两种解题思路,第一种是:获取到所有节点的值后,将偶数层的节点值倒序(先存right,再存left实现倒序)。第二种则是在获取节点的值的时候就倒序存入。定义两堆栈stack1和stack2,在遍历当前层节点的同时!stack1.empty() TreeNode *data=stack1.top();,存储下一层的节点(stack2.push(data->right),stack2.push(data->left)),以此类推,!stack2.empty() TreeNode *data=stack2.top();,存储下一层的节点(stack1.push(data->left),stack2.push(data->right))。     

    3 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>> result;
    15         if(pRoot==nullptr)
    16             return result;
    17         stack<TreeNode*> stack1,stack2;//分别存奇数和偶数层
    18         stack1.push(pRoot);
    19         while(!stack1.empty() || !stack2.empty()){
    20             if(!stack1.empty()){
    21                 vector<int> temp;
    22                 while(!stack1.empty()){
    23                     TreeNode *data=stack1.top();
    24                     stack1.pop();
    25                     temp.push_back(data->val);
    26                     if(data->left!=nullptr)
    27                         stack2.push(data->left);
    28                     if(data->right!=nullptr)
    29                         stack2.push(data->right);
    30                 }
    31                 result.push_back(temp);
    32             }
    33             if(!stack2.empty()){
    34                 vector<int> temp;
    35                 while(!stack2.empty()){
    36                     TreeNode *data=stack2.top();
    37                     stack2.pop();
    38                     temp.push_back(data->val);
    39                     if(data->right!=nullptr)
    40                         stack1.push(data->right);
    41                     if(data->left!=nullptr)
    42                         stack1.push(data->left);
    43                 }
    44                 result.push_back(temp);
    45             }
    46         }
    47         return result;
    48     }
    49 };
    View Code

    参考资料

    https://blog.csdn.net/u010005281/article/details/79759926

     
  • 相关阅读:
    HDU 5912 Fraction (模拟)
    CodeForces 722C Destroying Array (并查集)
    CodeForces 722B Verse Pattern (水题)
    CodeForces 722A Broken Clock (水题)
    CodeForces 723D Lakes in Berland (dfs搜索)
    CodeForces 723C Polycarp at the Radio (题意题+暴力)
    CodeForces 723B Text Document Analysis (水题模拟)
    CodeForces 723A The New Year: Meeting Friends (水题)
    hdu 1258
    hdu 2266 dfs+1258
  • 原文地址:https://www.cnblogs.com/wxwhnu/p/11434545.html
Copyright © 2011-2022 走看看