烟台 网站建设淘宝官网首页电脑版登录

news/2025/9/28 23:30:23/文章来源:
烟台 网站建设,淘宝官网首页电脑版登录,wordpress 获得分类名称,个人微信crm文章目录 一、题目二、一般遍历解法三、利用完全二叉树性质四、完整代码 所有的LeetCode题解索引#xff0c;可以看这篇文章——【算法和数据结构】LeetCode题解。 一、题目 二、一般遍历解法 思路分析#xff1a;利用层序遍历#xff0c;然后用num记录节点数量。其他的例如… 文章目录 一、题目二、一般遍历解法三、利用完全二叉树性质四、完整代码 所有的LeetCode题解索引可以看这篇文章——【算法和数据结构】LeetCode题解。 一、题目 二、一般遍历解法 思路分析利用层序遍历然后用num记录节点数量。其他的例如递归法和迭代法也是如此。   层序遍历程序如下 class Solution { public:int countNodes(TreeNode* root) {if (!root) return 0;queueTreeNode* que;que.push(root);int num 0; // 节点数量while (!que.empty()) {int size que.size(); // size必须固定, que.size()是不断变化的for (int i 0; i size; i) { TreeNode* node que.front();que.pop();num;if (node-left) que.push(node-left); // 空节点不入队if (node-right) que.push(node-right);}}return num;} };复杂度分析 时间复杂度 O ( n ) O(n) O(n)。空间复杂度 O ( n ) O(n) O(n)。   递归程序如下这应该是最精简的版本了 class Solution2 { public:int countNodes(TreeNode* root) {return root NULL ? 0 : countNodes(root-left) countNodes(root-right) 1;} };三、利用完全二叉树性质 思路分析完全二叉树具有一个特性假设它的深度为K它的节点个数在 [ 2 K − 1 − 1 , 2 K − 1 ] [2^{K-1}-1, 2^K-1] [2K−1−1,2K−1]之间意味着它只有两种情况一种是满二叉树一种是最后一层叶子节点没有满。对于情况一可以用 2 K − 1 2^K-1 2K−1来计算对于情况二分别递归其左子树和右子树递归到一定深度一定有左子树或者右子树为满二叉树然后按照情况一来计算。那么满二叉树的最左边节点和最右边节点的深度一定是相等的依据这个特性判断子树是否为满二叉树。 递归程序当中我们要确定三个步骤1、输入参数返回值 2、递归终止条件 3、单层递归逻辑。输入参数为中间节点返回值为左子树的节点数量右子树节点数量11是加上中间节点。当节点为空时递归终止返回0。每次递归我们都要计算最左/右边节点深度然后判断二者是否相等如果相等则是满二叉树返回 2 K − 1 2^K-1 2K−1K为深度。程序当中使用了左移运算符因为运算符的优先级问题记得加括号。左移运算符是二进制运算计算机计算的更快。   程序如下 class Solution3 { public:// 利用完全二叉树的性质递归法int countNodes(TreeNode* root) {if (!root) return 0;TreeNode* left root-left;TreeNode* right root-right;int Ldepth 0, Rdepth 0;while (left) { // 递归左子树left left-left;Ldepth;}while (right) { // 递归右子树right right-right;Rdepth;}if (Ldepth Rdepth) {return (2 Ldepth) - 1; // 为左移运算符位运算符相当于2*leftDepth但二进制运算计算机算的更快}return countNodes(root-left) countNodes(root-right) 1;} };复杂度分析 时间复杂度 O ( n ) O(n) O(n)。空间复杂度 O ( n ) O(n) O(n)。 四、完整代码 # include iostream # include vector # include queue # include string # include algorithm using namespace std;// 树节点定义 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:// 层序遍历法int countNodes(TreeNode* root) {if (!root) return 0;queueTreeNode* que;que.push(root);int num 0; // 节点数量while (!que.empty()) {int size que.size(); // size必须固定, que.size()是不断变化的for (int i 0; i size; i) { TreeNode* node que.front();que.pop();num;if (node-left) que.push(node-left); // 空节点不入队if (node-right) que.push(node-right);}}return num;} };class Solution2 { public:int countNodes(TreeNode* root) {return root NULL ? 0 : countNodes(root-left) countNodes(root-right) 1;} };class Solution3 { public:// 利用完全二叉树的性质递归法int countNodes(TreeNode* root) {if (!root) return 0;TreeNode* left root-left;TreeNode* right root-right;int Ldepth 0, Rdepth 0;while (left) { // 递归左子树left left-left;Ldepth;}while (right) { // 递归右子树right right-right;Rdepth;}if (Ldepth Rdepth) {return (2 Ldepth) - 1; // 为左移运算符位运算符相当于2*leftDepth但二进制运算计算机算的更快}return countNodes(root-left) countNodes(root-right) 1;} };void my_print(vector string v, string msg) {cout msg endl;for (vectorstring::iterator it v.begin(); it ! v.end(); it) {cout *it ;}cout endl; }void my_print2(vectorvectorint v, string str) {cout str endl;for (vectorvectorint::iterator vit v.begin(); vit v.end(); vit) {for (vectorint::iterator it (*vit).begin(); it (*vit).end(); it) {cout *it ;}cout endl;} }// 前序遍历迭代法创建二叉树每次迭代将容器首元素弹出弹出代码还可以再优化 void Tree_Generator(vectorstring t, TreeNode* node) {if (t[0] NULL || !t.size()) return; // 退出条件else {node new TreeNode(stoi(t[0].c_str())); // 中t.assign(t.begin() 1, t.end());Tree_Generator(t, node-left); // 左t.assign(t.begin() 1, t.end());Tree_Generator(t, node-right); // 右} }// 层序遍历 vectorvectorint levelOrder(TreeNode* root) {queueTreeNode* que;if (root ! NULL) que.push(root);vectorvectorint result;while (!que.empty()) {int size que.size(); // size必须固定, que.size()是不断变化的vectorint vec;for (int i 0; i size; i) {TreeNode* node que.front();que.pop();vec.push_back(node-val);if (node-left) que.push(node-left); // 空节点不入队if (node-right) que.push(node-right);}result.push_back(vec);}return result; }int main() {vectorstring t { 1, 2, 4, NULL, NULL, 5, NULL, NULL, 3, 6, NULL, NULL, NULL}; // 前序遍历my_print(t, 目标树);TreeNode* root new TreeNode();Tree_Generator(t, root);vectorvectorint tree levelOrder(root);my_print2(tree, 目标树:);Solution2 s1;int result s1.countNodes(root);cout 节点数量为 result endl;system(pause);return 0; }end

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

网站ppt怎么做微信小程序加盟哪个好

文章目录前言一、工行业务背景1.1、工行云计算架构组成1.2、工行云平台技术栈1.3、工行金融云成效1.3.1、入云规模同业最大1.3.2、业务如云场景广1.4、容灾及高可用保障1.5、PaaS 层多集群现状1.5.1、集群种类多1.5.2、k8s 集群 node 数量限制1.5.3、业务扩展快1.5.4、故障域分…

设计研发网站做网站要坚持

Box是一个用来组合和控制子元素布局的组件。它可以在一个矩形区域内排列一个或多个子元素,并根据所提供的参数来控制它们的位置、大小和样式。 Box的功能类似传统的FrameLayout。 下面通过示例了解Box的使用方法,首先看一个最简单的示例,如下…

对四大经典请求方式的疑惑

Apifox 中的 `Param` 和 HTTP 请求的结构。 ### ✅ 1. Apifox 中的 "Param" 部分对应什么? 在 Apifox(以及类似的 API 工具如 Postman)中,当你在接口配置里看到 **`Params`** 或 **`Query Params`** 这个…

南山区住房与建设局官方网站北京微网站建设设计服务公司

一、文本溢出 当容器中的文本内容超出容器的宽度或高度时,就会出现文本溢出的情况。下面介绍几种CSS实现文本溢出的方法。 单行文本溢出省略: 单行文本溢出省略通常用于标题等文本显示,可以通过设置white-space和text-overflow属性实现。w…

上海排名优化推广工具seo分析是什么意思

博主介绍:✌全网粉丝22W,CSDN博客专家、Java领域优质创作者,掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域✌ 技术范围:SpringBoot、SpringCloud、Vue、SSM、HTML、Nodejs、Python、MySQL、PostgreSQL、大数据、物…

2026 NOI 做题记录(四)

推荐阅读:C、G、J、P、S、W、XContest Link By DaiRuiChen007A. [QOJ7559] Bocchi the Rock (3.5) Problem Link 首先判定一组方案是否合法,把所有同色边缩起来,首先我们的弧必须连接所有异奇偶的点对,且任意一种连…

简单快速理解遗传算法

简单快速理解遗传算法<!DOCTYPE html> <html lang="zh-CN"> <head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, init…

浙江网站怎么做推广网站编辑器介绍

【VBA解决方案】全自动将Word中的文本公式转换为标准公式 写在最前面VBA代码全自动方法将md文档导出为word代码如何运行VBA代码注意事项 一些如何实现的回忆记录步骤解析手动将文本转换为Word公式代码逻辑步骤设想代码解析代码解释总结 其他背景介绍应用场景VBA脚本介绍如何使用…

wordpress 不能上传seo怎么优化一个网站

摘要&#xff1a;开发中经常需要校验用户提交的值是否满足要求&#xff0c;Valid可用于方法参数、返回值等的验证&#xff0c;但是对于参数为列表时无效&#xff0c;此处记录几种对列表进行验证的方法 Valid 注解通常用于验证单个对象的字段&#xff0c;而不是整个列表。仅添加…

网站建设模拟实验报告湛江网站制作费用

题目2&#xff1a; EXTERNAL关键字的作用&#xff1f;[多选] A、EXTERNAL关键字可以让用户创建一个外部表 B、创建外部表时&#xff0c;可以不加EXTERNAL关键字 C、通过EXTERNAL创建的外部表只删除元数据&#xff0c;不删除数据 D、不加EXTERNAL的时候&#xff0c;默认创建内…

wordpress导航菜单居中百度关键词优化首选667seo

算法&#xff1a; 这道题可以用回溯&#xff0c;但是可能会超时 可以用背包问题解决&#xff1a; 物品&#xff1a;单词 背包&#xff1a;字符串&#xff1a; 单词能否组成字符串s&#xff0c;就是问物品能不能把背包装满。 拆分时可以重复使用字典中的单词&#xff0c;就…

天津广告公司网站建设建网站手续

python的redis库查询返回的值默认是返回字节串&#xff0c;可以在redis.Redis()方法中通过设置decode_responses参数&#xff0c;让返回值直接是字符串&#xff1b; 查询返回字节串是因为Redis()方法中decode_responses默认值是False&#xff1a; 设置decode_responses为True就…

建立网站项目网络游戏排行榜2022

实现一个一遍扫描的编译前端&#xff0c;将简化高级语言的部分语法成分&#xff08;含赋值语句、分支语句、循环语句等&#xff09;翻译成四元式&#xff08;或三地址代码&#xff09;&#xff0c;还要求有合理的语法出错报错和错误恢复功能。 测试样例 beginwhile a<b do…

WordPress文章设置固定链接或永久链接 - 教程

WordPress文章设置固定链接或永久链接 - 教程pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", &qu…

垫江网站建设哪家好产品招商网

一、安装完虚拟机后的操作 第一步: 第二步&#xff1a;分配的内存大一下&#xff0c;处理器多些 第三步&#xff1a;打开虚拟化 打开虚拟机、安装KVM 一般企业如果使用kvm虚拟化平台&#xff0c;都会把物理服务器装成Centos的操作系统&#xff0c;然后装上kvm&#xff0c;创建…

尚义住房和城乡规划建设局网站广告设计专业前景

文章目录 嫌啰嗦直接看源码Q5 :PyTorch on CIFAR-10three_layer_convnet题面解析代码输出 Training a ConvNet题面解析代码输出 ThreeLayerConvNet题面解析代码输出 Train a Three-Layer ConvNet题面解析代码输出 Sequential API: Three-Layer ConvNet题面解析代码输出 CIFAR-1…

个人用云计算学习笔记 --15. (Linux 系统启动原理、Linux 防火墙管理)) - 实践

个人用云计算学习笔记 --15. (Linux 系统启动原理、Linux 防火墙管理)) - 实践pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-f…

给小孩出数学题

给小孩出数学题import java.util.Random; import java.util.Scanner; public class math_problems { public static void main(String[] args){ Random r=new Random(); Scanner sc=new Scanner(System.in); int probl…

dotnet项目编译运行

dotnet build - 基本构建 dotnet build PurestAdmin.Zero/PurestAdmin.Zero.csproj# 指定解决方案文件 dotnet build PurestAdmin.sln构建的常用参数 # 指定配置(Debug 或 Release) dotnet build --configuration Re…