import java.util.*;
/*
* public class TreeNode {
* int val = 0;
* TreeNode left = null;
* TreeNode right = null;
* public TreeNode(int val) {
* this.val = val;
* }
* }
*/
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param root1 TreeNode类
* @param root2 TreeNode类
* @return bool布尔型
*/
public boolean leafSimilar (TreeNode root1, TreeNode root2) {
// write code here
List<Integer> list1 = new ArrayList<>();
List<Integer> list2 = new ArrayList<>();
inOrder(root1, list1);
inOrder(root2, list2);
return check(list1, list2);
}
private void inOrder(TreeNode root, List<Integer> list) {
if (root == null) return;
inOrder(root.left, list);
if (root.left == null && root.right == null) list.add(root.val);
inOrder(root.right, list);
}
private boolean check(List<Integer> list1, List<Integer> list2) {
if (list1.size() != list2.size()) return false;
int size = list1.size();
for (int i = 0; i < size; i++) {
if (list1.get(i) != list2.get(size - i - 1)) return false;
}
return true;
}
}
- 利用二叉树的中序遍历,将所有的叶子节点存储到一个List集合中。叶子节点:左右子树都是null。
- 判断两个list集合是否为逆序的
- 如果list中元素个数不相等,则直接返回false;
- 遍历两个list集合,一个从左向右,另一个从右向左,取值判断是否相等,不相等直接返回false;
- 循序退出后,说明两个集合是逆序的,返回true。