请考虑一棵二叉树上所有的叶子,这些叶子的值按从左到右的顺序排列形成一个 叶值序列 。
如果有两棵二叉树的叶值序列是相同,那么我们就认为它们是 叶相似 的。
如果给定的两个头结点分别为 root1 和 root2 的树是叶相似的,则返回 true;否则返回 false 。
定义一个递归函数 求出叶子序列
分别求两个根节点的叶子序列再比较是否相等
class Solution {
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);
}
private void dfs(TreeNode root, List<Integer> seq){
if(root == null)
return;
else{
if(root.left == null && root.right == null)
seq.add(root.val);
else{
dfs(root.left, seq);
dfs(root.right, seq);
}
}
}
}