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

徐州的网站设计公司企业管理

徐州的网站设计,公司企业管理,福州专业做网站的公司有哪些,公司注册地址新规定问题链接 94.二叉树的中序遍历 问题描述 给定一个二叉树的根节点 root ,返回 它的 中序 遍历 。 示例 1: 输入:root [1,null,2,3] 输出:[1,3,2] 示例 2: 输入:root [] 输出:[] 示例 3&am…

问题链接

94.二叉树的中序遍历

问题描述

给定一个二叉树的根节点 root ,返回 它的 中序 遍历 。

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

输入:root = [1,null,2,3]
输出:[1,3,2]

示例 2:

输入:root = []
输出:[]

示例 3:

输入:root = [1]
输出:[1]

提示

  • 树中节点数目在范围 [0, 100]
  • -100 <= Node.val <= 100

问题解答

二叉树的中序遍历顺序为:左子树 → 根节点 → 右子树。以下提供两种常见解法:递归(简单直观)和迭代(进阶要求)。

方法一:递归解法

递归是最直接的实现方式,利用递归栈的特性自然满足中序遍历的顺序。

import java.util.ArrayList;
import java.util.List;class Solution {public List<Integer> inorderTraversal(TreeNode root) {List<Integer> result = new ArrayList<>();// 调用递归辅助方法inorder(root, result);return result;}// 递归辅助函数:遍历当前节点,并将结果存入resultprivate void inorder(TreeNode node, List<Integer> result) {// 边界条件:若节点为空,直接返回if (node == null) {return;}// 1. 先遍历左子树inorder(node.left, result);// 2. 再访问当前节点(根节点)result.add(node.val);// 3. 最后遍历右子树inorder(node.right, result);}
}

思路解析

  • 递归函数 inorder 负责处理单个节点:先递归遍历左子树,再将当前节点的值加入结果列表,最后递归遍历右子树。
  • 终止条件:当节点为 null 时,递归结束(空树/叶子节点的子节点无需处理)。

方法二:迭代解法(栈实现)

迭代法通过显式使用栈模拟递归过程,避免递归调用的栈开销,更符合进阶要求。

import java.util.ArrayList;
import java.util.List;
import java.util.Stack;class Solution {public List<Integer> inorderTraversal(TreeNode root) {List<Integer> result = new ArrayList<>();Stack<TreeNode> stack = new Stack<>();TreeNode cur = root; // 指针记录当前遍历的节点// 循环条件:当前节点不为空 或 栈不为空(还有节点未处理)while (cur != null || !stack.isEmpty()) {// 1. 先将所有左子节点入栈(直到最左侧节点)while (cur != null) {stack.push(cur);cur = cur.left; // 移动到左子节点}// 2. 弹出栈顶节点(此时左子树已处理完,该节点为当前子树的根节点)cur = stack.pop();result.add(cur.val); // 加入结果列表(处理根节点)// 3. 处理右子树cur = cur.right;}return result;}
}

思路解析

  • 使用 cur 指针追踪当前节点,先将所有左子节点依次入栈(确保左子树优先处理)。
  • cur 为空时,弹出栈顶节点(此时该节点的左子树已处理完),将其值加入结果列表,再将 cur 指向其右子节点(处理右子树)。
  • 循环直至 cur 为空且栈为空(所有节点处理完毕)。

复杂度分析

  • 时间复杂度:两种方法均为 O(n),其中 n 为二叉树节点数(每个节点恰好被访问一次)。
  • 空间复杂度
    • 递归解法:O(h)h 为树的高度,递归栈深度),最坏情况(链状树)为 O(n)
    • 迭代解法:O(h)(栈存储的节点数不超过树的高度),最坏情况为 O(n)

两种方法均能正确处理示例输入:

  • 示例1:root = [1,null,2,3] → 输出 [1,3,2]
  • 示例2:root = [] → 输出 []
  • 示例3:root = [1] → 输出 [1]
http://www.dtcms.com/a/443141.html

相关文章:

  • 企业网站优化方案模板学做php网站有哪些
  • 网站建设需准备什么软件北京网站搭建开发
  • 网站稳定期怎么做海外精品网站建设
  • apache 配置网站公司域名注册查询
  • 浅谈高校图书馆网站建设公司装修费分几年摊销
  • 从工具到语境:Anthropic 双文启示下的 AI 代理工程实践心得
  • 做5173这样的网站要多少人5 网站建设进度表
  • 广东专业的网站制作江门cms模板建站
  • 教育机构网站制作模板宁波seo外包代运营
  • 网站建设的作用和用途做网站 学什么
  • 成都网站推广优化公司形容网站做的好处
  • Java学习笔记Day15
  • 湘潭自助建站系统展览馆设计公司排名
  • 电子商务网站规划建设方案网络销售的方法和技巧
  • 阿里巴巴网站的营销策略专用主机网站建设
  • 网站设计制作程序网站策划选题
  • 长沙手机网站公司开发项目的流程
  • 初识MYSQL —— 库和表的操作
  • 怎样做网站推广自己网站建设要维护
  • 常州网站建设公司报价网站安全监测
  • 网站建设的中期报告网页qq登陆聊天
  • 什么网站做执法仪商业网站开发设计报告
  • 海南省建设局网站搜索咋样做班级主页网站
  • 成品网站源码1688体验区网站图片列表怎么做
  • 网站建站网站设计以绿色为主的网站
  • 嘉兴免费网站建站模板化工类 网站模板
  • 网站建设整个流程图威联通怎么建设网站
  • Spring AI 从入门到实战-目录
  • 为什么没有人做像58一样的网站湖南城市建设网站
  • C++进阶(6)——lambda表达式