请考虑一棵二叉树上所有的叶子,这些叶子的值按从左到右的顺序排列形成一个 叶值序列 。
举个例子,如上图所示,给定一棵叶值序列为 (6, 7, 4, 9, 8) 的树。
如果有两棵二叉树的叶值序列是相同,那么我们就认为它们是 叶相似 的。
如果给定的两个头结点分别为 root1 和 root2 的树是叶相似的,则返回 true;否则返回 false
List<Integer> t1 = new LinkedList<>();
List<Integer> t2 = new LinkedList<>();
public boolean leafSimilar(TreeNode root1, TreeNode root2) {
dfs(root1,t1);
dfs(root2,t2);
boolean flag = true;
if (t1.size() == t2.size()){
for (int i=0;i<t1.size();i++){
if (t1.get(i) != t2.get(i)) {
flag = false;
}
}
}else flag = false;
return flag;
}
void dfs(TreeNode root,List<Integer> t){//前中后序都可以
if (root == null) return;
dfs(root.left,t);
dfs(root.right,t);
if (root.left == null && root.right == null){
t.add(root.val);
}
}