LeetCode——872. 叶子相似的树(Java)

题目描述

题干:
请考虑一棵二叉树上所有的叶子,这些叶子的值按从左到右的顺序排列形成一个 叶值序列 。

example

举个例子,如上图所示,给定一棵叶值序列为 (6, 7, 4, 9, 8) 的树。
如果有两棵二叉树的叶值序列是相同,那么我们就认为它们是 叶相似 的。
如果给定的两个根结点分别为 root1 和 root2 的树是叶相似的,则返回 true;否则返回 false 。

示例1:

examlpe1

输入:root1 = [3,5,1,6,2,9,8,null,null,7,4], root2 = [3,5,1,6,7,4,2,null,null,null,null,null,null,9,8]
输出:true

示例2:
输入:root1 = [1,2,3], root2 = [1,3,2]
输出:false

题解思路

比较两个二叉树的叶子节点是否相同,显而易见,只要我们得到两棵二叉树的叶值序列比较即可

这里就采用基础的深度优先遍历,将访问到的叶子节点存放在集合中比较,代码如下

正确代码

    public boolean leafSimilar(TreeNode root1, TreeNode root2) {
        List<Integer> seq1 = new ArrayList<>();
        if (root1 != null){
            dfs(root1, seq1);
        }

        List<Integer> seq2 = new ArrayList<>();
        if (root2 != null){
            dfs(root2, seq2);
        }

        return seq1.equals(seq2);
    }

    //深度优先遍历
    public void dfs(TreeNode node, List<Integer> seq) {
        if (node.left == null && node.right == null) {
            seq.add(node.val);
        } else {
            if (node.left != null) {
                dfs(node.left, seq);
            }if (node.right != null) {
                dfs(node.right, seq);
            }
        }
    }

总结

基础的二叉树问题,当然如果采用层序遍历也是可以的,因为复杂度相差不大,就见仁见智了

如果文章存在问题或者有更好的题解,欢迎评论区斧正和评论,各自努力,你我最高处见
posted @ 2021-05-10 09:09  21岁还不是架构师  阅读(77)  评论(0编辑  收藏  举报