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

京公网安备 11010502036488号