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

别人用我公司权限做网站温州seo博客

别人用我公司权限做网站,温州seo博客,福州正规网站建设公司报价,宁夏网站营销推广层序遍历为 1 2 3 4 5 6 7 的二叉树,其中序遍历的递归调用的过程实际上是什么样的? // 中序遍历 const inorder (root) > {if (!root) {return;}inorder(root.left);res.push(root.val);inorder(root.right);}递归调用的完整展开 为了更清晰地看到…

层序遍历为 1 2 3 4 5 6 7 的二叉树,其中序遍历的递归调用的过程实际上是什么样的?

// 中序遍历
const inorder = (root) => {if (!root) {return;}inorder(root.left);res.push(root.val);inorder(root.right);}

递归调用的完整展开

为了更清晰地看到所有执行的语句,我们可以将所有递归调用展开:

inorder(1):if (!1)falseinorder(1.left)inorder(2):if (!2)falseinorder(2.left)inorder(4):if (!4)falseinorder(4.left)inorder(null):if (!null)returnres.push(4)inorder(4.right)inorder(null):if (!null)returnres.push(2)inorder(2.right)inorder(5):if (!5)falseinorder(5.left)inorder(null):if (!null)returnres.push(5)inorder(5.right)inorder(null):if (!null)returnres.push(1)inorder(1.right)inorder(3):if (!3)falseinorder(3.left)inorder(6):if (!6)falseinorder(6.left)inorder(null):if (!null)returnres.push(6)inorder(6.right)inorder(null):if (!null)returnres.push(3)inorder(3.right)inorder(7):if (!7)falseinorder(7.left)inorder(null):if (!null)returnres.push(7)inorder(7.right)inorder(null):if (!null)return

初始理解

首先,我们需要明确几个概念:

  1. 层序遍历:这是指按照树的层次从上到下、从左到右依次访问节点。给定的层序遍历序列是 1 2 3 4 5 6 7,这意味着:

    • 第一层:1(根节点)
    • 第二层:2(左子节点),3(右子节点)
    • 第三层:4(2的左子节点),5(2的右子节点),6(3的左子节点),7(3的右子节点)

    因此,二叉树的结构如下:

        1/ \2   3/ \ / \4  5 6 7
  1. 中序遍历:这是指按照“左子树 - 根节点 - 右子树”的顺序访问节点。对于上面的二叉树,中序遍历的结果应该是 4 2 5 1 6 3 7

  2. 递归过程:给定的中序遍历的递归代码会按照上述顺序访问节点。我们需要将递归调用展开,看看具体的执行顺序。

递归展开

让我们从根节点 1 开始,逐步展开递归调用。我们将 inorder(root) 替换为具体的节点值来表示当前的 root

初始调用:inorder(1)

1. inorder(1)
  • root1,不为 null,所以:
    • inorder(1.left):即 inorder(2)
    • res.push(1.val):即 res.push(1)
    • inorder(1.right):即 inorder(3)
2. inorder(2)
  • root2,不为 null,所以:
    • inorder(2.left):即 inorder(4)
    • res.push(2.val):即 res.push(2)
    • inorder(2.right):即 inorder(5)
3. inorder(4)
  • root4,不为 null,所以:
    • inorder(4.left)4.leftnullinorder(null) 直接返回
    • res.push(4.val):即 res.push(4)
    • inorder(4.right)4.rightnullinorder(null) 直接返回
  • 执行顺序:
    • inorder(null)4.left):无操作
    • res.push(4)
    • inorder(null)4.right):无操作
  • inorder(4) 完成
回到 inorder(2)
  • 已经执行了 inorder(4),接下来:
    • res.push(2)
    • inorder(5)
4. inorder(5)
  • root5,不为 null,所以:
    • inorder(5.left)5.leftnullinorder(null) 直接返回
    • res.push(5.val):即 res.push(5)
    • inorder(5.right)5.rightnullinorder(null) 直接返回
  • 执行顺序:
    • inorder(null)5.left):无操作
    • res.push(5)
    • inorder(null)5.right):无操作
  • inorder(5) 完成
回到 inorder(2)
  • 已经执行了 inorder(5)inorder(2) 完成
回到 inorder(1)
  • 已经执行了 inorder(2),接下来:
    • res.push(1)
    • inorder(3)
5. inorder(3)
  • root3,不为 null,所以:
    • inorder(3.left):即 inorder(6)
    • res.push(3.val):即 res.push(3)
    • inorder(3.right):即 inorder(7)
6. inorder(6)
  • root6,不为 null,所以:
    • inorder(6.left)6.leftnullinorder(null) 直接返回
    • res.push(6.val):即 res.push(6)
    • inorder(6.right)6.rightnullinorder(null) 直接返回
  • 执行顺序:
    • inorder(null)6.left):无操作
    • res.push(6)
    • inorder(null)6.right):无操作
  • inorder(6) 完成
回到 inorder(3)
  • 已经执行了 inorder(6),接下来:
    • res.push(3)
    • inorder(7)
7. inorder(7)
  • root7,不为 null,所以:
    • inorder(7.left)7.leftnullinorder(null) 直接返回
    • res.push(7.val):即 res.push(7)
    • inorder(7.right)7.rightnullinorder(null) 直接返回
  • 执行顺序:
    • inorder(null)7.left):无操作
    • res.push(7)
    • inorder(null)7.right):无操作
  • inorder(7) 完成
回到 inorder(3)
  • 已经执行了 inorder(7)inorder(3) 完成
回到 inorder(1)
  • 已经执行了 inorder(3)inorder(1) 完成

执行顺序总结

按照上述展开,res.push 的执行顺序(即中序遍历的顺序)如下:

  1. inorder(4)
    • res.push(4)
  2. inorder(2)
    • res.push(2)
  3. inorder(5)
    • res.push(5)
  4. inorder(1)
    • res.push(1)
  5. inorder(6)
    • res.push(6)
  6. inorder(3)
    • res.push(3)
  7. inorder(7)
    • res.push(7)

因此,res 中的最终顺序是 [4, 2, 5, 1, 6, 3, 7]

实际执行的 res.push 语句顺序

从上面的展开中,提取所有 res.push 的语句:

  1. res.push(4)
  2. res.push(2)
  3. res.push(5)
  4. res.push(1)
  5. res.push(6)
  6. res.push(3)
  7. res.push(7)

验证中序遍历

让我们手动进行中序遍历以验证:

  • 从根节点 1 开始:
    • 遍历左子树 2
      • 遍历 2 的左子树 4
        • 4 无左子节点,访问 4
        • 4 无右子节点
      • 访问 2
      • 遍历 2 的右子树 5
        • 5 无左子节点,访问 5
        • 5 无右子节点
    • 访问 1
    • 遍历右子树 3
      • 遍历 3 的左子树 6
        • 6 无左子节点,访问 6
        • 6 无右子节点
      • 访问 3
      • 遍历 3 的右子树 7
        • 7 无左子节点,访问 7
        • 7 无右子节点

访问顺序:4, 2, 5, 1, 6, 3, 7,与递归展开的结果一致。

最终答案

将所有的递归调用展开后,实际执行的 res.push 语句的顺序如下:

  1. res.push(4)
  2. res.push(2)
  3. res.push(5)
  4. res.push(1)
  5. res.push(6)
  6. res.push(3)
  7. res.push(7)

因此,中序遍历的结果是 [4, 2, 5, 1, 6, 3, 7]

http://www.dtcms.com/wzjs/2288.html

相关文章:

  • 做网站对于不同的分辨率优化方法
  • 成都网站设计公司官网seo网站优化工具
  • 天津企业网站建设seo顾问服务 品达优化
  • 为什么建设网银网站打不开做seo必须有网站吗
  • 无锡百度网站排名西安seo王
  • 专业的营销网站免费企业网站建设流程
  • 东莞市做阀门的网站百度投放平台
  • 做影视网站被起诉上海谷歌seo推广公司
  • wordpress get avatar东莞优化seo
  • 校史馆展馆展厅设计百度seo推广优化
  • 溧阳做网站阿亮seo技术顾问
  • 资源下载类网站源码小程序开发系统
  • 后台管理网站模板下载cms快速建站
  • 做宴会网站北京做的好的seo公司
  • 做网站会犯法吗免费制作网站
  • wordpress百度插件成都网站排名生客seo怎么样
  • 做电商网站前端的技术选型是网站的宣传与推广
  • php网站开发视频教程下载百度关键词挖掘查排名工具
  • HTML5怎么做自适应网站全国疫情高峰感染高峰
  • 做网站 前端营销策划的十个步骤
  • 模块网站弊端线上营销活动有哪些
  • 甜水园网站建设seo入门基础知识
  • 做网站如何接单链接交换平台
  • 网站建设常见故障好用搜索引擎排名
  • 便宜做网站8818黄页网
  • 网站建设实验代码能让网络非常流畅的软件
  • wordpress做社交网站吗全网优化哪家好
  • 四字母域名建设网站可以吗营销方法
  • 兰州市城乡建设局网站通知公告百度竞价返点一般多少
  • 网站设计及建设合同b2b免费发布信息平台