LeetCode刷题之路-每日一题-872. 叶子相似的树

前言

尽管今天有点困,有些累,但是坚持博客是不能落下的!继续日更!
昨天刚复习了树的结构,这不今天刚好每日一题就是有关树结构的。

题目描述


请考虑一棵二叉树上所有的叶子,这些叶子的值按从左到右的顺序排列形成一个 叶值序列 。
在这里插入图片描述
举个例子,如上图所示,给定一棵叶值序列为 (6, 7, 4, 9, 8) 的树。

如果有两棵二叉树的叶值序列是相同,那么我们就认为它们是 叶相似 的。

如果给定的两个根结点分别为 root1 和 root2 的树是叶相似的,则返回 true;否则返回 false 。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/leaf-similar-trees
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。


解题思路

一开始,还想些骚操作,把左边叶子和右边叶子逐一比较。但是一想,算了,还是先用简单的方法实现吧。于是,分别用2个List将每棵树的叶子全部记录下来,然后遍历对比。


    public boolean leafSimilar(TreeNode root1, TreeNode root2) {
        List<Integer> leaf1 = new ArrayList<>();
        List<Integer> leaf2 = new ArrayList<>();
        findLeaf(root1, leaf1);
        findLeaf(root2, leaf2);

        if (leaf1.size() != leaf2.size()) {
            return false;
        }
        for (int i=0; i<leaf1.size(); i++) {
            if (!leaf1.get(i).equals(leaf2.get(i))) {
                return false;
            }
        }
        return true;
    }

    private void findLeaf(TreeNode root, List<Integer> leaf) {
        if (root == null) {
            return ;
        }

        if (root.left == null && null == root.right) {
            leaf.add(root.val);
            return ;
        }

        findLeaf(root.left, leaf);
        findLeaf(root.right, leaf);
    }

写完后,跑去看了下官方题解,结果,也没有更好的实现。跟我一样的思路。不过,倒是发现了另外一个性能相关的点:List leaf作为入参传递进去时,作为成员变量访问的性能要快。大概是因为成员变量需要通过当前对象去访问,而方法入参是局部变量。访问速度上肯定要快一些,加上这是个递归不断访问,性能差异就会有所显现。
今天,就这么愉快的打卡啦

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值