二叉树层次遍历通用模板公式

二叉树的基本结构        

#include<iostream>

using namespace std;

struct TreeNode {
    /* data */
    int val;
    TreeNode* left;
    TreeNode* right;
    TreeNode() {}
    TreeNode(int x) : left(nullptr), right(nullptr), val(x) {}
};

力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台备战技术面试?力扣提供海量技术面试资源,帮助你高效提升编程技能,轻松拿下世界 IT 名企 Dream Offer。icon-default.png?t=N7T8https://leetcode.cn/problems/binary-tree-level-order-traversal/1. 层序遍历:

class Solution {
public:
    vector<vector<int>> levelOrder(TreeNode* root) {
        vector<vector<int>> res;

        queue<TreeNode*> queue;

        if(root==nullptr) {
            return res;
        }
        queue.push(root);
        while(!queue.empty()) {

            int n = queue.size();
            vector<int> temp;

            for(int i=0;i<n;i++) {
                TreeNode* node = queue.front();
                queue.pop();

                temp.push_back(node->val);

                if(node->left!=nullptr) {
                    queue.push(node->left);
                }

                if(node->right!=nullptr) {
                    queue.push(node->right);
                }
            }
            res.push_back(temp);
        }

        return res;
    }
};

2.力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台备战技术面试?力扣提供海量技术面试资源,帮助你高效提升编程技能,轻松拿下世界 IT 名企 Dream Offer。icon-default.png?t=N7T8https://leetcode.cn/problems/binary-tree-zigzag-level-order-traversal/description/

二叉树的锯齿形层序遍历

基本的写法实现,重要的是要加一个 Flag 标值位,

每次来进行反转

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode() : val(0), left(nullptr), right(nullptr) {}
 *     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
 *     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
 * };
 */
class Solution {
public:
    vector<vector<int>> res;
    vector<vector<int>> zigzagLevelOrder(TreeNode* root) {

        if(root==nullptr) {
            return res;
        }
        helper(root);
        return res;
    }

    void helper(TreeNode* root) {

    	if(root==nullptr) {
    		return;
    	}

    	queue<TreeNode*> queue2;
    	queue2.push(root);

    	int flag = 0;
    	while(!queue2.empty()) {

    		vector<int> temp;
    		int n = queue2.size();

    		for(int i=0;i<n;i++) {
    			TreeNode* node = queue2.front();
    			int val = node->val;
    			temp.push_back(val);
    			queue2.pop();
    			if(node->left!=nullptr) {
    				queue2.push(node->left);
    			}
    			if(node->right!=nullptr) {
    				queue2.push(node->right);
    			}
    		}

    		if(flag%2==1) {
    			reverse(temp.begin(),temp.end());
    		}
    		res.push_back(temp);
    		flag++;
    	}
    }
};

3. 力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台备战技术面试?力扣提供海量技术面试资源,帮助你高效提升编程技能,轻松拿下世界 IT 名企 Dream Offer。icon-default.png?t=N7T8https://leetcode.cn/problems/binary-tree-level-order-traversal-ii/description/       

自底到上部的来层序遍历二叉树

将最后的结果逆转下即可得到最终结果

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode() : val(0), left(nullptr), right(nullptr) {}
 *     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
 *     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
 * };
 */
class Solution {
public:
    vector<vector<int>> levelOrderBottom(TreeNode* root) {
        auto res = vector<vector<int>>();

		if(!root) {
			return res;
		}

		queue<TreeNode*> q;
		q.push(root);

		while(!q.empty()) {
			auto level = vector<int>();
			int size = q.size();
			for(int i = 0; i < size; ++i) {
				TreeNode* node = q.front();
				// 弹出一个其中的元素。
				q.pop();

				level.push_back(node->val);
				if(node->left!=nullptr) {
					q.push(node->left);
				}
				if(node->right!=nullptr) {
					q.push(node->right);
				}
			}
			res.push_back(level);
		}
        reverse(res.begin(),res.end());
		return res;
    }
};

199. 二叉树的右视图icon-default.png?t=N7T8https://leetcode.cn/problems/binary-tree-right-side-view/

先下结论:

遍历到最后的一个节点的时候,将最后的一个节点值加入进去

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode() : val(0), left(nullptr), right(nullptr) {}
 *     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
 *     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
 * };
 */
class Solution {
public:
    vector<int> rightSideView(TreeNode* root) {

        if(root==nullptr) {
            return {};
        }
        vector<int> res;

    	queue<TreeNode*> queue2;

    	queue2.push(root);

    	while (!queue2.empty()) {
    		int n = queue2.size();

    		for (int i=0;i<n;i++) {
    			TreeNode* node = queue2.front();
                queue2.pop();
    			if(node->left!=nullptr) {
    				queue2.push(node->left);
    			}
    			if(node->right!=nullptr) {
    				queue2.push(node->right);
    			}

    			if(i==n-1) {
    				res.push_back(node->val);
    			}
    		}
    	}

    	return res;
    }
};

 

637. 二叉树的层平均值icon-default.png?t=N7T8https://leetcode.cn/problems/average-of-levels-in-binary-tree/

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode() : val(0), left(nullptr), right(nullptr) {}
 *     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
 *     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
 * };
 */
class Solution {
public:
    vector<double> averageOfLevels(TreeNode* root) {
        vector<double> res;
            if(!root) {
                return res;
            }
            
            queue<TreeNode*> q;
            q.push(root);

            while(!q.empty()) { //
                int size  = q.size();
                double sum2 = 0;

                for(int i=0; i<size; i++) {
                    auto node = q.front();
                    q.pop();
                    sum2+=node->val;
                    if(node->left!=nullptr) {
                        q.push(node->left);//
                    }
                    if(node->right!=nullptr) {
                        q.push(node->right);
                    }
                }
                res.push_back(sum2/size);
            }
            return res;
    }
};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/203782.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

tornado模版注入 [护网杯 2018]easy_tornado 1

打开题目 打开flag.txt 告诉我们flag在 /fllllllllllllag下 打开welcome.txt 我们看到了render渲染函数&#xff0c;联想到ssti 打开hints.txt 然后我们留意到每个打开url上面都有filehash 告诉我们如果想要访问/fllllllllllllag下的flag文件&#xff0c;是需要filehash这个GE…

python -- python安装

1、python的诞生和发展&#xff1a; python语言是一种解释型、面向对象型、动态数据类型的高级程序设计语言。 2、python的安装&#xff1a; 1、安装解析器&#xff1a; 在安装的过程中需要注意的是&#xff1a; 在安装pycharm的时候也是同样的道理&#xff0c;需要指定安装…

python循环语句和函数

1.使用for循环打印9*9乘法表 for i in range(1, 10):for j in range(1, i1):print(i, "*", j, "", i*j, end"\t")print()结果&#xff1a; 2.使用while循环打印9*9乘法表 i 1 while i < 10:j 1while j < i1:print(i, "*", j…

基于APM(PIX)飞控和missionplanner制作遥控无人车-从零搭建自主pix无人车无人履带车坦克-2(以乐迪crossflight飞控为例)

这里重点以乐迪crossflight飞控为例进行组装调试。 1.刷写固件 安装最新版的乐迪地面站&#xff0c;在官网可以下载。由于产品里面不好找到对应的飞控&#xff0c;可以在首页滑动图片里进入。 1.连接飞控和电脑&#xff0c;查看com口&#xff0c;安装驱动。 2.刷写固件。如果…

4152A/E/F 调制域分析仪(0.125Hz~4GHz/26.5GHz/40GHz)

4152A/E/F 调制域分析仪 频率范围覆盖&#xff1a;0.125Hz&#xff5e;40GHz 能够精确表征信号频率随时间动态变化规律 01 产品综述 4152系列调制域分析仪能够精确表征信号频率随时间动态变化规律&#xff0c;最大监测带宽36GHz&#xff0c;最短每隔100ns无隙监测&#xff…

openGauss Summit 2023邀您参会

数据库作为千行万业数据的基石&#xff0c;也是推动数字经济发展的核心。随着数字经济的蓬勃发展&#xff0c;数据库将迎来更加广阔的应用场景和更加迫切的需求。openGauss 社区旨在汇聚产、学、研、用多方力量&#xff0c;聚焦基础软件核心能力的构建&#xff0c;引领国内数据…

基于OpenCV的手势识别系统设计与开发

摘要 随着计算机技术与信息处理技术迅速发展&#xff0c;智能化电子设备逐渐进入到日常的生产和生活中&#xff0c;与此同时&#xff0c;人们对电子设备操作过程的便捷化也提出了新的要求&#xff0c;这也促使计算机进行图像处理的技术也得到了发展。近些年兴起的模式识别技术…

PyQt6 QToolButton工具按钮控件

​锋哥原创的PyQt6视频教程&#xff1a; 2024版 PyQt6 Python桌面开发 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili2024版 PyQt6 Python桌面开发 视频教程(无废话版) 玩命更新中~共计32条视频&#xff0c;包括&#xff1a;2024版 PyQt6 Python桌面开发 视频教程(无废话…

4方面详解微信小程序和H5的区别,开发者采用哪种开发比较好?

与传统App相比&#xff0c;开发时间更短、所需投入更低的移动应用一定是小程序和H5应用&#xff0c;企业在开发移动端的时候选择开发小程序还是H5好呢&#xff1f;对比两者的区别&#xff0c;来决定开发者采用哪种开发比较好。 01、运行环境不同 小程序&#xff1a;就是依赖于…

Linux地址空间随机化

ASLR(Address Space Layout Randomization)在2005年被引入到Linux的内核 kernel 2.6.12 中&#xff0c;早在2004年就以补丁的形式引入。内存地址的随机化&#xff0c;意味着同一应用多次执行所使用内存空间完全不同&#xff0c;也意味着简单的缓冲区溢出攻击无法达到目的。 1.…

如何判断数据库慢 SQL 查询?

慢 SQL 查询通常指执行时间较长或者消耗大量系统资源的查询。要判断一个 SQL 查询是否慢&#xff0c;可以考虑以下几个方面&#xff1a; 执行时间&#xff1a; 观察查询执行所需的时间。如果一个查询花费了相对较长的时间才能返回结果&#xff0c;可能就是慢查询的一个指标。通…

【Unity记录】EDM4U(External Dependency Manager)使用说明

GitHub - googlesamples/unity-jar-resolver: Unity plugin which resolves Android & iOS dependencies and performs version management 引入谷歌包时发现有这个玩意&#xff0c;主要用途是自动搜索工程内任意文件夹下的Editor/*Dependencies.xml文件 <dependencie…

2023智能手表行业洞察 | 独立通信成重要趋势,千元档位最受青睐

智研所联合紫光展锐发布《2023 智能手表行业洞察》报告&#xff0c;参与调研人数 1075 人&#xff0c;本次报告研究了智能手表行业从业人员及消费者对智能手表技术未来发展趋势的预判。 洞察报告显示&#xff0c;行业人员及消费者认为智能手表的技术趋势将呈现多样化发展&#…

计算机基础知识61

JsonResponse 功能例子 你自己写一个类&#xff0c;实现JsonResponse 功能&#xff0c;不需要传safeFalse&#xff0c;无论字典或列表&#xff0c;都能完成序列化返回给前端 1 响应头例子 四种情况&#xff0c;在响应头返回数据 xxxx # 第一种情况 JsonResponse def show(req…

数据通信——OSPF路由控制实验

实验需求 我们采用OSPF完成路由的控制&#xff0c;首先连接如下拓扑&#xff1a; 所有设备均属于area 0&#xff0c;网段及环回口配置如上图所示。 实验目的&#xff1a;R4和R1的环回口通信路径为R4——R2——R1若R2出现问题&#xff0c;自动切换到R3路径。 实验配置 1&am…

C++ CryptoPP使用AES加解密

Crypto (CryptoPP) 是一个用于密码学和加密的 C 库。它是一个开源项目&#xff0c;提供了大量的密码学算法和功能&#xff0c;包括对称加密、非对称加密、哈希函数、消息认证码 (MAC)、数字签名等。Crypto 的目标是提供高性能和可靠的密码学工具&#xff0c;以满足软件开发中对…

05-React路由(Router 5版本)

React路由背景介绍 背景介绍 多页面应用与SPA单页面应用 多页面应用 先说传统的多页面&#xff0c;需要写多个子页面 点击导航栏&#xff0c;整个页面都会刷新&#xff0c;但是实际上我只想刷新一小块的内容&#xff0c;其他东西变化不大 而且这个单页面&#xff0c;每次切…

风光互补路灯简介及配置方案

风光互补路灯是一种新型的路灯系统&#xff0c;使用太阳能和风能进行发电&#xff0c;以供给路灯照明。它结合了太阳能光伏板和垂直轴风力发电机&#xff0c;可以在一天内不同的时间段和天气条件下&#xff0c;通过自然资源发电&#xff0c;实现能源的自给自足和环境保护。 风…

鸿蒙系统扫盲(三):鸿蒙开发用什么语言?

1.两种开发方向 我们常说鸿蒙开发&#xff0c;但是其实鸿蒙开发分为两个方向&#xff1a; 一个是系统级别的开发&#xff0c;比如驱动&#xff0c;内核和框架层的开发&#xff0c;这种开发以C/C为主 还有一个是应用级别的开发&#xff0c;在API7以及以下&#xff0c;还是支持…

attention中Q,K,V的理解

第一种 1.首先定义三个线性变换矩阵&#xff0c;query&#xff0c;key&#xff0c;value&#xff1a; class BertSelfAttention(nn.Module):self.query nn.Linear(config.hidden_size, self.all_head_size) # 输入768&#xff0c; 输出768self.key nn.Linear(config.hidde…