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

    从上到下打印出二叉树的每个节点,同一层的节点按照从左到右的顺序打印。

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

    3
    /
    9 20
    /
    15 7
    返回:

    [3,9,20,15,7]

    因为是要从上到下,所以要求先进先出,先压入的一层就要先输出,所以采用队列。

    从第一层开始,先输出根节点的值,然后将左右子树压入队列(如果不为空)。

    之后每一层,先记录下来队列的长度,即为这一层节点的数量,然后挨个弹出,对该层每个节点都输出值,然后压入左右子树(如果不为空)。因为已经提前记录了这一层节点数量,不会输出到下一层去。

    注意处理根节点为空的情况。

     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<int> levelOrder(TreeNode* root) {
    13         if(root==nullptr)
    14             return {};
    15         queue<TreeNode*> q;
    16         vector<int> ret;
    17         ret.push_back(root->val);
    18         if(root->left!=nullptr)
    19             q.push(root->left);
    20         if(root->right!=nullptr)
    21             q.push(root->right);
    22         while(!q.empty()){
    23             int cur_size=q.size();
    24             while(cur_size!=0){
    25                 TreeNode* curptr=q.front();
    26                 q.pop();
    27                 cur_size--;
    28                 ret.push_back(curptr->val);
    29                 if(curptr->left!=nullptr)
    30                     q.push(curptr->left);
    31                 if(curptr->right!=nullptr)
    32                     q.push(curptr->right);
    33             }
    34         }
    35         return ret;
    36     }
    37 };

     经过思考发现,记录每一层数量其实完全是白用功,因为本题不用分层输出,直接顺序到下一层完全没影响。

  • 相关阅读:
    Sass
    Less文件的建立
    面试问题整理
    高光谱图像分类部分名词解析
    监督学习,无监督学习和半监督学习
    git
    node.js安装及其环境配置
    浏览器从输入网址到渲染出页面的过程
    node的api
    模块与包管理工具
  • 原文地址:https://www.cnblogs.com/rookiez/p/13234461.html
Copyright © 2011-2022 走看看