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

高新网站设计找哪家合肥做网站的企业

高新网站设计找哪家,合肥做网站的企业,全国高端定制,南宁制作网站的公司二叉树的中序遍历(三种方法详解) 题目描述示例提示 方法 1:递归法思路代码实现复杂度分析 方法 2:迭代法(栈模拟)思路代码实现复杂度分析 方法 3:Morris 遍历(线索化二叉树&#xff…

二叉树的中序遍历(三种方法详解)

    • 题目描述
      • 示例
      • 提示
    • 方法 1:递归法
      • 思路
      • 代码实现
      • 复杂度分析
    • 方法 2:迭代法(栈模拟)
      • 思路
      • 代码实现
      • 复杂度分析
    • 方法 3:Morris 遍历(线索化二叉树)
      • 思路
      • 代码实现
      • 复杂度分析
    • 三种方法对比
    • 总结

题目描述

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

示例

示例 1:

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

示例 2:

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

示例 3:

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

提示

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

方法 1:递归法

思路

中序遍历的顺序为:左子树 → 根节点 → 右子树

代码实现

#include <stdlib.h>struct TreeNode {int val;struct TreeNode *left;struct TreeNode *right;
};void inorder(struct TreeNode* root, int* result, int* returnSize) {if (!root) {return;}inorder(root->left, result, returnSize);result[(*returnSize)++] = root->val;inorder(root->right, result, returnSize);
}int* inorderTraversal(struct TreeNode* root, int* returnSize) {int* result = (int*)malloc(501 * sizeof(int)); // 预分配足够的空间*returnSize = 0;inorder(root, result, returnSize);return result;
}

复杂度分析

  • 时间复杂度:O(n),每个节点访问一次。
  • 空间复杂度:O(n),最坏情况下(单链表形式的树),递归调用栈深度为 O(n)。

方法 2:迭代法(栈模拟)

思路

使用栈来模拟递归过程:

  1. 先沿着左子树一路入栈,直到最左叶子。
  2. 弹出栈顶元素,访问该节点。
  3. 转向右子树,继续步骤 1 和 2。

代码实现

#include <stdlib.h>int* inorderTraversal(struct TreeNode* root, int* returnSize) {int* result = (int*)malloc(501 * sizeof(int));*returnSize = 0;struct TreeNode** stack = (struct TreeNode**)malloc(501 * sizeof(struct TreeNode*));int top = 0;while (root || top) {while (root) {stack[top++] = root;root = root->left;}root = stack[--top]; // 出栈访问result[(*returnSize)++] = root->val;root = root->right;}free(stack);return result;
}

复杂度分析

  • 时间复杂度:O(n),每个节点入栈和出栈各一次。
  • 空间复杂度:O(n),最坏情况下栈深度为 O(n)。

方法 3:Morris 遍历(线索化二叉树)

思路

Morris 遍历通过线索二叉树来减少空间复杂度,步骤如下:

  1. 如果当前节点没有左子树,访问该节点并进入右子树。
  2. 如果当前节点有左子树,找到前驱节点(左子树的最右节点):
    • 若前驱节点的 right 为空,将其 right 指向当前节点,然后进入左子树。
    • 若前驱节点的 right 为当前节点,说明左子树已访问,访问当前节点,恢复前驱节点的 right 指针为空,然后进入右子树。

代码实现

#include <stdlib.h>int* inorderTraversal(struct TreeNode* root, int* returnSize) {int* result = (int*)malloc(501 * sizeof(int));*returnSize = 0;struct TreeNode* predecessor = NULL;while (root) {if (root->left) {predecessor = root->left;while (predecessor->right && predecessor->right != root) {predecessor = predecessor->right;}if (!predecessor->right) {predecessor->right = root;root = root->left;} else {result[(*returnSize)++] = root->val;predecessor->right = NULL;root = root->right;}} else {result[(*returnSize)++] = root->val;root = root->right;}}return result;
}
作者:力扣官方题解
链接:https://leetcode.cn/problems/binary-tree-inorder-traversal/solutions/412886/er-cha-shu-de-zhong-xu-bian-li-by-leetcode-solutio/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

复杂度分析

  • 时间复杂度:O(n),每个节点访问最多两次。
  • 空间复杂度:O(1),仅使用了额外的指针变量。

三种方法对比

方法时间复杂度空间复杂度适用场景
递归O(n)O(n)代码简洁,适合初学者
迭代(栈)O(n)O(n)适用于系统栈深度受限的情况
MorrisO(n)O(1)适用于对空间复杂度有严格要求的情况

总结

  1. 递归法 是最直观的方法,但会消耗额外的栈空间。
  2. 迭代法(栈模拟) 通过显式栈实现递归过程,适用于深度受限的情况。
  3. Morris 遍历法 通过修改树结构实现 O(1) 空间复杂度,是一种高效方法,但对原树结构有一定影响。

文章转载自:

http://L6vFGopQ.wsjnr.cn
http://GpdXpCkR.wsjnr.cn
http://8aosT6iq.wsjnr.cn
http://FcdxUy8I.wsjnr.cn
http://Ik5gltdJ.wsjnr.cn
http://CEKWpOzJ.wsjnr.cn
http://l7vU1MtV.wsjnr.cn
http://HjTJQE83.wsjnr.cn
http://TXAc4CA0.wsjnr.cn
http://wrr63Tfh.wsjnr.cn
http://qwORWQuF.wsjnr.cn
http://Q9To7rB9.wsjnr.cn
http://zBpvCMsg.wsjnr.cn
http://fHzITUY8.wsjnr.cn
http://tFmp7lZE.wsjnr.cn
http://mGgUEkYf.wsjnr.cn
http://7rqZaLY4.wsjnr.cn
http://ulQrMTkJ.wsjnr.cn
http://FcYm3EXb.wsjnr.cn
http://CzDKiACn.wsjnr.cn
http://cZaJoBQp.wsjnr.cn
http://NaPwhH2E.wsjnr.cn
http://Sf1Tct6B.wsjnr.cn
http://H5Ft1hiV.wsjnr.cn
http://hYSMYGUe.wsjnr.cn
http://ynOa8itu.wsjnr.cn
http://EwMmJtdB.wsjnr.cn
http://SvF2q2M8.wsjnr.cn
http://skFZ5ayE.wsjnr.cn
http://VWyO6m7L.wsjnr.cn
http://www.dtcms.com/wzjs/759725.html

相关文章:

  • 电子图书网站建设openshift安装wordpress密码忘记
  • 坪山网站建设基本流程wordpress作者关注功能怎么实现
  • 门户网站建设经验总结做搜索引擎优化的企业
  • 超市网站建设方案shopex 网站搬家
  • 网站开发浏览器不支持flash免费crm试用
  • 营销型网站建设域名网站建设教程吧
  • jquery网站底部导航效果哪个网站可以做艺术字
  • 有做网站的吗 优帮云莆田外贸网站建设有哪些
  • 产品定制网站新媒体 网站建设
  • 专业群建设 网站做一个响应网站多少钱
  • wordpress网站搬家模板app
  • 网站建设专属名词电商流量推广
  • 网站开发交易平台wordpress 管理页面
  • 外贸网站logo免费发布产品信息网站
  • 杭州网站艰涩零食网站怎么做
  • 2018年深圳建设网站公司长春网站建设致电吉网传媒优
  • 网站的颜色搭配六安营销公司
  • 网站常用字号企业邮箱格式怎么写
  • 网页框架设计企业seo排名优化
  • 网站建设ftp上传是空目录南昌做网站的公司有哪些
  • 静态网站开发语言温州移动互联网开发
  • 坑梓网站建设包括哪些网站设计高怎么表示
  • 网站开发课程设计河北廊坊建设局网站
  • 深圳宝安上市公司网站建设报价h5端是手机端吗
  • 清溪东莞网站建设成都到西安防疫政策
  • 亚马逊外贸网站如何做永川网站建设熊掌号
  • 跑腿网站建设郑州经济技术开发区
  • 外贸网站建设 联雅企业网站建立教程
  • 怎么投诉做网站的公司西安十大网络公司
  • php开发系统网站建设网上房地产官方网