叶子相似的树

题目要求

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

![屏幕快照 2019-08-30 上午10.48.39](/Users/congyuyang/Pictures/博客图片/屏幕快照 2019-08-30 上午10.48.39.png)

举个例子,如上图所示,给定一颗叶值序列为 (6, 7, 4, 9, 8) 的树。

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

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

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

解决方案

这道题目我们可以用深度优先搜索的方法,递归地探索每一个子节点,如果该点的左右孩子都为null,则该点是一个叶子节点,我们将其放入列表中。最后比较两个数的链表是否相同即可。

package LeetCode.叶子相似的树;

import java.util.ArrayList;
import java.util.List;

/**
 * @Author: congyuyang
 * @Date: 2019-08-30 10:05
 */
public class Solution {
    public boolean leafSimilar(TreeNode root1, TreeNode root2) {
        List<Integer> leaves1 = new ArrayList();
        List<Integer> leaves2 = new ArrayList();
        dfs(root1, leaves1);
        dfs(root2, leaves2);
        return leaves1.equals(leaves2);
    }

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

}

复杂度分析

  • 时间复杂度:O(T1 + T2)

  • 空间复杂度:O(T1 + T2)

    (其中T1,T2是给定树的长度)


   转载规则


《叶子相似的树》 cyyyys 采用 知识共享署名 4.0 国际许可协议 进行许可。
 上一篇
另一个树的子树 另一个树的子树
题目要求给定两个非空二叉树 s 和 t,检验 s 中是否包含和 t 具有相同结构和节点值的子树。s 的一个子树包括 s 的一个节点和这个节点的所有子孙。s 也可以看做它自身的一棵子树。 示例 1:给定的树 s: 3 / \ 4 5
2019-08-31
下一篇 
翻转二叉树 翻转二叉树
题目要求翻转一棵二叉树。 示例: 输入: 4 / \ 2 7 / \ / \ 1 3 6 9输出: 4 / \ 7 2 / \ / \ 9 6 3 1来源:力扣(L
2019-08-29
  目录