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

做那个免费视频网站潍坊网站建设优化

做那个免费视频网站,潍坊网站建设优化,天津seo推广软件,中国新闻社是事业编制吗一、题目描述 给你二叉树的根节点 root #xff0c;返回它节点值的 前序 遍历。 示例 1#xff1a; 输入#xff1a;root [1,null,2,3] 输出#xff1a;[1,2,3]示例 2#xff1a; 输入#xff1a;root [] 输出#xff1a;[]示例 3#xff1a; 输入#xff1a;roo…一、题目描述 给你二叉树的根节点 root 返回它节点值的 前序 遍历。 示例 1 输入root [1,null,2,3] 输出[1,2,3]示例 2 输入root [] 输出[]示例 3 输入root [1] 输出[1]示例 4 输入root [1,2] 输出[1,2]示例 5 输入root [1,null,2] 输出[1,2]提示 树中节点数目在范围 [0, 100] 内-100 Node.val 100 二、方法一递归方法 一解题思路 递归方法是最直观的按照前序遍历的顺序递归地访问每个节点 如果当前节点为空返回。访问当前节点将节点的值添加到结果列表中。递归地前序遍历左子树。递归地前序遍历右子树。 二具体代码 import java.util.ArrayList; import java.util.List;public class Solution {public ListInteger preorderTraversal(TreeNode root) {ListInteger result new ArrayList();preorder(root, result);return result;}private void preorder(TreeNode node, ListInteger result) {if (node null) {return;}result.add(node.val); // 访问根节点preorder(node.left, result); // 遍历左子树preorder(node.right, result); // 遍历右子树} }三时间复杂度和空间复杂度 1. 时间复杂度 原因递归方法访问树中每个节点一次。计算对于具有N个节点的二叉树每个节点都恰好被访问一次。结果时间复杂度为O(N)其中N是二叉树中节点的数量。 2. 空间复杂度 原因递归方法使用栈空间来存储递归调用的信息其大小取决于树的高度。最坏情况如果树完全不平衡每个节点只有左子节点或只有右子节点递归栈的深度将达到N。最好情况如果树是完全平衡的递归栈的深度将是logN。额外空间代码中没有使用除了递归栈以外的额外空间。结果空间复杂度介于O(logN)和O(N)之间取决于树的形状。额外空间复杂度是O(1)。 3. 总结 时间复杂度O(N)空间复杂度O(1)额外空间O(logN)到O(N)递归栈空间 四总结知识点 递归这是一种编程技巧允许函数调用自身。在这个代码中preorder函数会递归地调用自身来遍历二叉树的每个节点。 二叉树遍历代码实现了二叉树的前序遍历这是一种深度优先遍历策略按照“根-左-右”的顺序访问树的节点。 二叉树节点定义代码中使用了TreeNode类来定义二叉树的节点每个节点包含一个整数值val和两个指向其左右子节点的指针left和right。 Java集合框架代码使用了ArrayList来存储遍历的结果。ArrayList是Java集合框架中的一个可调整大小的数组实现用于存储对象列表。 函数参数传递代码中的preorder函数接受一个TreeNode类型的参数和一个ListInteger类型的参数这展示了如何在Java中传递和修改对象引用。 基本语法结构代码包含了基本的Java语法结构如类的定义、方法的定义、条件语句if、返回语句return和列表的添加操作result.add。 递归的基本条件在preorder函数中递归的基本条件是当遇到一个null节点时返回这避免了递归调用的无限循环。 方法重载Solution类中有两个名为preorder的方法但它们的参数列表不同这是Java方法重载的例子。一个方法是公共的用于外部调用另一个方法是私有的作为辅助方法用于递归遍历。 三、方法二迭代方法 一解题思路 迭代方法通常使用栈来模拟递归过程 创建一个空栈将根节点压入栈中。当栈不为空时弹出栈顶元素访问该节点并将其值添加到结果列表中。先将弹出节点的右子节点如果有压入栈中然后将左子节点如果有压入栈中。这样可以保证左子节点先被访问。重复步骤2和3直到栈为空。 二具体代码 import java.util.ArrayList; import java.util.List; import java.util.Stack;public class Solution {public ListInteger preorderTraversal(TreeNode root) {ListInteger result new ArrayList();StackTreeNode stack new Stack();if (root ! null) {stack.push(root);}while (!stack.isEmpty()) {TreeNode node stack.pop();result.add(node.val); // 访问节点if (node.right ! null) {stack.push(node.right); // 右子节点先入栈}if (node.left ! null) {stack.push(node.left); // 左子节点后入栈}}return result;} }三时间复杂度和空间复杂度 1. 时间复杂度 原因迭代方法访问树中每个节点一次。计算对于具有N个节点的二叉树每个节点都恰好被访问一次。结果时间复杂度为O(N)其中N是二叉树中节点的数量。 2. 空间复杂度 原因迭代方法使用栈空间来存储待访问的节点其大小取决于树的高度。最坏情况如果树完全不平衡每个节点只有左子节点或只有右子节点栈的深度将达到N。最好情况如果树是完全平衡的栈的深度将是logN。结果空间复杂度介于O(logN)和O(N)之间取决于树的形状。 3. 总结 时间复杂度O(N)空间复杂度O(logN)到O(N) 四总结知识点 迭代方法与递归方法不同迭代方法使用栈来模拟递归过程用于遍历二叉树的节点。 栈数据结构代码使用了Stack类来存储待访问的节点。栈是一种后进先出LIFO的数据结构用于在迭代过程中保持节点的访问顺序。 二叉树遍历代码实现了二叉树的前序遍历按照“根-左-右”的顺序访问树的节点。 二叉树节点定义代码中使用了TreeNode类来定义二叉树的节点每个节点包含一个整数值val和两个指向其左右子节点的指针left和right。 Java集合框架代码使用了ArrayList来存储遍历的结果。ArrayList是Java集合框架中的一个可调整大小的数组实现用于存储对象列表。 条件语句代码中的if语句用于检查当前节点是否有左右子节点以便将它们添加到栈中。 循环结构while循环用于在栈不为空的情况下继续遍历二叉树的节点。 基本语法结构代码包含了基本的Java语法结构如类的定义、方法的定义、栈的操作push和pop以及列表的添加操作result.add。 以上就是解决这个问题的详细步骤希望能够为各位提供启发和帮助。
http://www.hkea.cn/news/14425554/

相关文章:

  • 网站 建设 维护 公司西安网站设计开发
  • 网站2级目录怎么做的做网站如何把栏目放到首页
  • 安阳做网站的地方上海市建设执业注册中心网站
  • 手机创建个人网站 免费设计网页时有哪些配色方法
  • 超炫酷网站欣赏涞源县住房和城乡建设局网站
  • 站长之家排行榜北京住房与城乡建设网站
  • 类似酷家乐做庭院的网站项目负责人质量建设厅官方网站
  • html 图片展示网站ios 集成wordpress
  • vs做asp网站淘宝的电子商务网站的建设
  • 做网站后台应该谁来做石家庄网络推广优化
  • 山东高端网站建设wang莆田百度seo排名
  • 关于公司做网站供比价报告网站建设基础书本
  • 佛山招收网站设计免费开发平台网站
  • 网站建站哪家公司好一点什么是软件定制开发
  • 北京做网站建设公司wordpress代码学习
  • 一个虚拟空间可以放几个网站中国航天空间站最新消息
  • 盐城网站建设找哪家好WordPress下级
  • 西安优化seo班级优化大师官网登录
  • 西安大型网站开发大数据营销试卷
  • 南京网站建设要多少钱抖音电商
  • 湖北大网站建设免费搭建企业网站
  • 网站负责人核验现场拍摄照片电子件广州竞价外包
  • 上海网站建设官方网站2d游戏制作软件
  • seo优化工具使用教程东莞网站快速排名优化
  • 萍乡商城网站建设环保企业网站模板
  • 做网站每年需要多少维护费免费ai写作网站3000字
  • 电商网站统计怎么做学校网站建设先进事迹
  • 网站建设与维护报告总结做网站的收益在哪
  • 律师个人 网站做优化网站规划要点
  • 全国企业信用信息查询网站wordpress改为邮箱验证注册