叶子相似的树

52 阅读1分钟
/**
 * 请考虑一棵二叉树上所有的叶子,这些叶子的值按从左到右的顺序排列形成一个 叶值序列 。
 *
 *
 *
 * 举个例子,如上图所示,给定一棵叶值序列为 (6, 7, 4, 9, 8) 的树。
 *
 * 如果有两棵二叉树的叶值序列是相同,那么我们就认为它们是 叶相似 的。
 *
 * 如果给定的两个根结点分别为 root1 和 root2 的树是叶相似的,则返回 true;否则返回 false 。
 *
 * 参考链接: https://leetcode.cn/problems/leaf-similar-trees/?envType=study-plan-v2&envId=leetcode-75
 */
public class LeafSimilar {

    /**
     * 深度优先搜索
     * @param root1
     * @param root2
     * @return
     */
    public boolean leafSimilar(TreeNode root1, TreeNode root2) {
        List<Integer> list1 =  new ArrayList<>();
        if (root1 != null) {
            dfs(root1, list1);
        }

        List<Integer> list2 =  new ArrayList<>();
        if (root2 != null) {
            dfs(root2, list2);
        }
        return list1.equals(list2);
    }

    public void dfs(TreeNode root, List<Integer> list) {
        if (root.left == null && root.right == null) {
            list.add(root.val);
            return;
        } else {
            if (root.left != null) {
                dfs(root.left, list);
            }

            if (root.right != null) {
                dfs(root.right, list);
            }
        }
    }

    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;
        }
    }
}