最近刷LeetCode题目的一些思路,题目信息
考虑一个二叉树的所有叶子。这些叶子的值按从左到右的顺序排列形成一个 叶值序列 。
举个例子,给定一个如上图所示的树,其叶值序列为 (6, 7, 4, 9, 8)
。
如果两个二叉树的叶值序列相同,我们就认为它们是 叶相似的。
如果给定的两个头结点分别为 root1
和 root2
的树是叶相似的,返回 true
;否则返回 false
。
提示:
- 给定的两个树会有
1
到100
个结点。
--------------------------------------------------------------------------------------
找到各自树的叶值队列,然后进行比较
1 寻找叶值队列
private void getTreeChild(List<Integer> list, TreeNode root){
if(root.left == null && root.right == null){
list.add(root.val);
} else {
if(root.left != null){
getTreeChild(list,root.left);
}
if(root.right != null){
getTreeChild(list,root.right);
}
}
}
2:主方法体,将两个树的叶值队列都找到,然后挨个比较
public boolean leafSimilar(TreeNode root1, TreeNode root2) {
boolean retBoolean = true;
List<Integer> leftRootList = new ArrayList<>();
List<Integer> rightRootList = new ArrayList<>();
getTreeChild(leftRootList,root1);
getTreeChild(rightRootList,root2);
if(leftRootList.size() != rightRootList.size()){
return false;
} else for(int i=0; i<leftRootList.size(); i++){
if(leftRootList.get(i) != rightRootList.get(i)){
retBoolean = false;
break;
}
}
return retBoolean;
}