首页 > 其他分享 >从上至下遍历二叉树---队列的性质

从上至下遍历二叉树---队列的性质

时间:2023-02-15 12:56:05浏览次数:47  
标签:node 遍历 TreeNode --- right 二叉树 push 节点 left

问题:从上到下打印出二叉树的每个节点,同一层的节点按照从左到右的顺序打印。剑指 Offer 32 - I. 从上到下打印二叉树 - 力扣(LeetCode)

思路:利用队列先入先出的性质,可以依次打印出每层的节点,即遍历完一个 front() 节点就 pop() ;

时间复杂度:O(N ); 空间复杂度:O(N )

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 * };
 */
class Solution {
public:
    vector<int> levelOrder(TreeNode* root) {
        vector<int>v;
        if(root == nullptr) return v;
        queue<TreeNode*>q;
        q.push(root);
        while(q.size()){
            TreeNode* node = q.front();
            q.pop();
            v.push_back(node->val);
            if(node->left) q.push(node->left);
            if(node->right) q.push(node->right);
        }
        return v;
    }
};

加要求1:每层的节点对应一行,按行打印出节点

思路:嵌套一层循环,该循环次数是 外层循环int L = queue.size() 的大小,也即当前层的节点数,访问一个节点就pop() ;并且 L- - ;

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 * };
 */
class Solution {
public:
    vector<vector<int>> levelOrder(TreeNode* root) {
        vector<vector<int>>res;
        if(root == nullptr ) return res;
        queue<TreeNode*>q;
        q.push(root);
        while(q.size()){
            vector<int>tmp;
            int L = q.size();
            while(L--){
                TreeNode* node = q.front();
                q.pop();
                tmp.push_back(node->val);
                if(node->left) q.push(node->left);
                if(node->right) q.push(node->right);
            }
            res.push_back(tmp);                
        }
        return res;
    }
};

加要求2:“之” 字形遍历遍历,即第一行按照从左到右的顺序打印,第二层按照从右到左的顺序打印,第三行再按照从左到右的顺序打印,

 

标签:node,遍历,TreeNode,---,right,二叉树,push,节点,left
From: https://www.cnblogs.com/xuan01/p/17122416.html

相关文章

  • ORA-27125: unable to create shared memory segment
    在安装12cR2的时候报错,如下图 造成这种情况的原因:1)SGA设置太高了2)还有就是kernel.shmmax=8589934592参数设置太小了建议SGA+PGA<物理内存的80%我这里kernel.s......
  • 2020-11-10
    ​CSS中的BFC详解​一、何为BFC     BFC(BlockFormattingContext)格式化上下文,是Web页面中盒模型布局的CSS渲染模式,指一个独立的渲染区域或者说是一个隔离的独立容器......
  • 2020-11-10
    Vuex从使用到原理解析一、Vuex是什么  Vuex是专门为Vuejs应用程序设计的状态管理工具。它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的......
  • ES6-Generator函数
    Generator函数执行Generator函数会返回一个遍历器函数。返回的遍历器函数,可以依次遍历Generator函数内部的每一个状态。形式上,Generator函数是一个普通函数,有两个特征。一:fu......
  • 树莓派新手入门教程 - node下使用gpio
    [b]安装Node[/b]为了运行Node脚本,树莓派必须安装Node,可以参考[url=http://thisdavej.com/beginners-guide-to-installing-node-js-on-a-raspberr......
  • 用无代码开发应用系统-应用创建基础
    互联网共享软件工厂KeplerPAP无代码平台系列持续更新中学完后我涨薪了。​在软件开发构建应用程序时,我们有时候会发现,在整个应用程序中如何使用数据也是一个令人头疼的问题......
  • 重学Java-第六章 Java运算符
    6.1算术运算符​ Java语言提供了执行加减乘除四则运算的运算符。算数运算符被用在数学表达式中,可以使用任意嵌套的小括号,其作用与数学中相同。下表列出了算术运算符:......
  • leetcode:题目1-
    第1题,对应leetcode题目编号:一、题目:xxx1、原题-力扣链接:请点击此处二、思路+代码1、方法一:一、思路二、代码statussList_merge3(mySList*pa,mySList*pb){ if......
  • OpenFeign-远程调用工具
    介绍声明式的http客户端,底层还是HttpClient,可以解决RestTemplate硬编码进行远程服务调用的缺点官网:https://github.com/OpenFeign/feign入门以A微服务对B微服务远程调......
  • 重学Java-第二章 Java快速入门
    2.1在Windows上安装Java2.1.1下载安装包打开Oracle官网的JDK下载地址,推荐下载JDK1.8版本,1.8版本是目前企业使用最多的版本,下拉找到Java8,选择windows平台。​ ......