998. 最大二叉树 II(递归模拟)

83 阅读2分钟

image.jpeg

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第2天,点击查看活动详情

测试岗位也越来卷了,除了基本的功能测试外,还要有编程基础、脚本经验才脱颖而出。

怎么才能提高我们的编程能力呢,刷LeetCode是最佳的途径之一,话不多数,刷题走起~

一、题目描述:

  • 题目内容

    image.png

  • 题目示例

    image.png

  • 题目解析

    • 树中节点数目在范围 [1, 100] 内
    • 1 <= Node.val <= 100
    • 树中的所有值 互不相同
    • 1 <= val <= 100

二、思路分析:

我们拿到本题,读取题目又是一道654.最大二叉树的拓展,该题中要求添加的新节点在右子树中且其值要大于子树中所有元素,那么最大二叉树具有哪些特点:

  • 构建二叉树中遇到空节点,则需要返回null
  • 当 root.val 小于 val时,则root作为新节点的左子树存在
  • 当 root.val 大于 val 时,则继续遍历右子树的节点
  • root树中节点元素值都是独一无二的,没有重复

了解题目规则后,我们可以使用递归的方法进行模拟实现,思路如下:

  • 方法一: 递归遍历

    • 在构建最大二叉树中,存在三种条件
    • 当 root.val 小于 val时,则root直接成为新节点的左子树
    • 当 root.val 大于 val时,则继续遍历右子树cur
    • 在右子树cur中遍历到大于val时,其cur节点为新节点val的左子树
    • 否则直接遍历到叶子节点cur,其cur右节点上创建新val节点 流程图 (3).jpg 根据以上思路,我们使用Python可以快速实现,代码如下:
      class Solution(object):
          def insertIntoMaxTree(self, root, val):
              """
              :type root: TreeNode
              :type val: int
              :rtype: TreeNode
              """
              if not root: return TreeNode(val)
              if root.val < val:
                  return TreeNode(val,root,None)
              root.right = self.insertIntoMaxTree(root.right,val)
              return root
      

三、总结:

本题考察仍然考察二叉树遍历排序的,在本题中我们直接使用递归的方法,遍历右子树节点。在递归中需要判断root.val 与 val值,当root.val大于val时需要将root.right值重新指向root.right.right节点上,同时当遍历完右子树底部都没有大于root.val则需要在其叶子节点创建右子树,AC 提交记录如下:

image.png

  • 时间复杂度:O(n),其中 n 是给定的树中的节点个数
  • 空间复杂度:O(1),没有使用额外空间

以上是本期内容,欢迎大佬们点赞评论,下期见~~~