持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第2天,点击查看活动详情
测试岗位也越来卷了,除了基本的功能测试外,还要有编程基础、脚本经验才脱颖而出。
怎么才能提高我们的编程能力呢,刷LeetCode是最佳的途径之一,话不多数,刷题走起~
一、题目描述:
-
题目内容
-
题目示例
-
题目解析
- 树中节点数目在范围
[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节点
根据以上思路,我们使用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 提交记录如下:
- 时间复杂度:O(n),其中 n 是给定的树中的节点个数
- 空间复杂度:O(1),没有使用额外空间
以上是本期内容,欢迎大佬们点赞评论,下期见~~~