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
        ArrayList<Integer> arrayList_pre = new ArrayList<>();
        ArrayList<Integer> arrayList_post = new ArrayList<>();
        search(root1, arrayList_pre);
        search(root2, arrayList_post);
        if(arrayList_pre.size()!=arrayList_post.size()){
            return false;
        }else{
            for(int i=0;i<arrayList_pre.size();i++){
                if(!arrayList_pre.get(i).equals(arrayList_post.get(arrayList_post.size() - 1 - i))){
                    return false;
                }
            }
        }
        return true;
    }

    public void search(TreeNode root, ArrayList<Integer> arrayList) {
        if (root==null) {
            return;
        }
        if(root.left==null && root.right==null){
            arrayList.add(root.val);
        }
        search(root.left, arrayList);
        search(root.right, arrayList);
    }


}

本题主要考察二叉树的遍历和叶子结点的遍历,所用编程语言为java.

我们可以分别将两棵二叉树的叶子结点存储在集合中,然后判断两个集合。

1.如果两个集合大小不相等,两棵树的叶子结点不是相逆的。

2.如果两个集合相等,判断两个集合是否互为逆序,不为逆序则不是相逆的。