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.如果两个集合相等,判断两个集合是否互为逆序,不为逆序则不是相逆的。