当前位置: 首页 > news >正文

商城网站建设分为几块专业网络推广公司

商城网站建设分为几块,专业网络推广公司,手机端网站做app开发,昆明几大网站LeetCode 热题 100_二叉树的直径(40_543) 题目描述:输入输出样例:题解:解题思路:思路一(递归): 代码实现代码实现(思路一(递归)&#…

LeetCode 热题 100_二叉树的直径(40_543)

    • 题目描述:
    • 输入输出样例:
    • 题解:
      • 解题思路:
        • 思路一(递归):
      • 代码实现
        • 代码实现(思路一(递归)):
        • 以思路一为例进行调试

题目描述:

给你一棵二叉树的根节点,返回该树的 直径

二叉树的 直径 是指树中任意两个节点之间最长路径的 长度 。这条路径可能经过也可能不经过根节点 root 。

两节点之间路径的 长度 由它们之间边数表示。

输入输出样例:

示例 1:
在这里插入图片描述

输入:root = [1,2,3,4,5]
输出:3
解释:3 ,取路径 [4,2,1,3] 或 [5,2,1,3] 的长度。

示例 2:
输入:root = [1,2]
输出:1

提示:
树中节点数目在范围 [1, 104] 内
-100 <= Node.val <= 100

题解:

解题思路:

思路一(递归):

1、我们可以采用和计算二叉树深度同样的思想,计算二叉树的深度是挑选左右子树中深度的最大值,而二叉树的直径是左子树的最大深度深度+右子树的最大深度。
2、复杂度分析:
① 时间复杂度:O(N),其中 N 为二叉树的节点数,即遍历一棵二叉树的时间复杂度,每个结点只被访问一次。
② 空间复杂度:O(h),其中 h 为二叉树的高度(递归需要额外的栈空间)。
本题的力扣官方题解链接(非常不错)

代码实现

代码实现(思路一(递归)):
//二叉树的直径
int diameterOfBinaryTree(TreeNode* root) {depth(root);return ans;
}int depth(TreeNode *root){if(root==nullptr) return 0;//left:左子树的高度(高度指从叶结点开始测量)int left=depth(root->left);//right:右子树的高度int right=depth(root->right);//更新树的最大直径ans=max((left+right),ans);// 返回当前节点的深度return max(left,right)+1;
}
以思路一为例进行调试
#include<iostream>
#include<vector>
#include<queue>
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 Soluton
{int ans=0;//注意递归返回的是深度,所以我们要分成两个函数int depth(TreeNode *root){if(root==nullptr) return 0;//left:左孩子子树的高度(高度指从叶结点开始测量)int left=depth(root->left);//right:右孩子子树的高度int right=depth(root->right);//求当前两节点间的最大长度ans=max((left+right),ans);return max(left,right)+1;}public://二叉树的直径int diameterOfBinaryTree(TreeNode* root) {depth(root);return ans;}//通过数组创建二叉树(数组元素为-1代表nullptr)TreeNode *creatTree(vector<int> nums){if(nums.empty()) return nullptr;TreeNode *root=new TreeNode(nums[0]);queue<TreeNode *> q;q.push(root);int i=1;while (i<nums.size()){TreeNode *node=q.front();q.pop();if(i<nums.size()&&nums[i]!=-1){node->left=new TreeNode(nums[i]);q.push(node->left);}++i;if(i<nums.size()&&nums[i]!=-1){node->right=new TreeNode(nums[i]);q.push(node->right);}++i;}return root;}//中序遍历输出二叉树(用于调试二叉树创建是否正确)void inorder(TreeNode *root){if(root==nullptr) return ;inorder(root->left);cout<<root->val<<" ";inorder(root->right);} 
};int main(){vector<int> nums={1,2,3,4,5};Soluton s;//创建二叉树TreeNode *root=s.creatTree(nums);//调试二叉树是否创建正确//s.inorder(root); cout<<"二叉树的直径:"<<s.diameterOfBinaryTree(root);return 0;
}

LeetCode 热题 100_二叉树的直径(40_543)原题链接
欢迎大家和我沟通交流(✿◠‿◠)

http://www.ds6.com.cn/news/77326.html

相关文章:

  • 域名停靠网站下载大全免费功能neotv
  • 织梦网站底端的怎么删除百度助手安卓版下载
  • 前端框架模板搜索优化推广公司
  • 哪有网站建设明细报价表品牌推广策划方案
  • 外墙清洗搜狗搜索引擎优化论文
  • 手机哪里可以做视频网站推广普通话手抄报简单又好看
  • 无锡网站制作企业佛山网站优化服务
  • 免费WAP建导航网站网上哪里接app推广单
  • 做消费信贷网站价格什么是电商?电商怎么做
  • 国外网站视觉设计趋势网络推广费用预算表
  • 企业网站php模板下载衡阳seo快速排名
  • wordpress 上传logo深圳seo优化排名
  • 在网上做贸易哪个网站好郑州网站关键词排名技术代理
  • 网站什么做博客推广的方法与技巧
  • 青岛手机建站模板静态网站模板
  • 苏州知名网站建设设计公司sem和seo
  • 京网站建设公司中国域名注册局官网
  • 广东一站式网站建设推荐百度指数有哪些功能
  • 变装WordPress搜索引擎优化关键词选择的方法有哪些
  • 邳州网站制作百度一下1688
  • 购买网站服务如何做支出上海培训机构有哪些
  • 相册管理网站模板下载韩国日本比分
  • 做网站哪一部分用到Javaseo和sem是什么意思啊
  • 长春网络推广优化惠州百度seo哪里强
  • 揭阳智能模板建站厦门人才网个人会员登录
  • 建设项目安监备案网站杭州疫情最新消息
  • 茂名免费自助建站模板天津seo标准
  • 手机网站 图标如何优化搜索引擎的搜索功能
  • 用自己电脑做网站 dns域名注册新网
  • 做网站找 汇搜网络厦门人才网最新招聘信息网