LeetCode刷题记录(二十九):两棵二叉搜索树中的所有元素


theme: smartblue

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

两棵二叉搜索树中的所有元素

image.png

题目解析

题目素材解析

根据题目描述来看,一共给出了两个二叉树。

  1. 二叉树root1。

  2. 二叉树root2。

代码和题目描述中,分别给出了二叉树TreeNode的具体实现类,还有二叉树的图例。

并且二叉树的节点控制在0到5000之间。要注意测试用例会存在二叉树节点为0的情况的。

我的解读

我感觉这道题不能算是中等题,如果再进阶一些,控制一下时间复杂度的话会更符合中等难度。

所以这道题总归就两点:

  1. 如何获取二叉树中的各个元素值?因为存在树结构,还是推荐递归的方式来解决。

  2. 如何对list集合进行有效排序?排序方式有很多,看解题者的喜好了,我直接用了Java集合内置的方法,显然对得起我的运行结果。

这里面的优化点,并不在前者,更好的优化点还是在排序问题上。

解题思路

解题思路很清晰明了,简述一下解题过程吧。

第一步,声明一个结果值集合。

第二步,判断两个二叉树是否为空;如果为空,则忽略不计。

第三步,如果不为空的情况下,则进入递归逻辑。

第四步,在递归逻辑中,只需要将当前树的节点值放入结果list集合中。

第五步,随后判断当前树下的左连接点和右节点是否为空,如果不为空,则进入递归逻辑;为空则退出递归。

第六步,当全部的节点值均放入list集合中后,利用List集合的排序方法进行排序后返回即可。

代码

```java /** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode() {} * TreeNode(int val) { this.val = val; } * TreeNode(int val, TreeNode left, TreeNode right) { * this.val = val; * this.left = left; * this.right = right; * } * } */ class Solution {

public List<Integer> getAllElements(TreeNode root1, TreeNode root2) {
    List<Integer> list = new ArrayList<>();
    if(root1 != null){
        addE(list, root1);
    }
    if(root2 != null){
        addE(list, root2);
    }
    return list.stream().sorted().collect(Collectors.toList());
}

private void addE(List<Integer> list, TreeNode node){
    list.add(node.val);
    if(node.left != null){
        addE(list, node.left);
    }
    if(node.right != null){
        addE(list, node.right);
    }
}

} ```

执行结果

第一次提交失败是因为没有给root1和root2二叉树判空,所以这点要注意一下。

image.png

Java代码本地执行

在解答其他题的时候在程序中还是挺好实现的。

但是每次有这种测试用例提供数组,然后自动转成树结构的题,在本地调试可是相当的费脑筋。

比起实现这道题来说,这道题在本地调试上下的功夫更多些。

Java本地可调试代码,请参考github/Ijiran,可通过索引看到相应代码。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Ijiran

一杯咖啡太贵,一块糖就可以

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值