最近刷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 = false; 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; }