請考慮一顆二叉樹上所有的葉子,這些葉子的值按從左到右的順序排列形成一個 葉值序列 。
舉個例子,如上圖所示,給定一顆葉值序列爲 (6, 7, 4, 9, 8) 的樹。
如果有兩顆二叉樹的葉值序列是相同,那麼我們就認爲它們是 葉相似 的。
如果給定的兩個頭結點分別爲 root1 和 root2 的樹是葉相似的,則返回 true;否則返回 false 。
思路:
基礎的深度優先遍歷。
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
List<Integer> list1 = new ArrayList<>();
List<Integer> list2 = new ArrayList<>();
public boolean leafSimilar(TreeNode root1, TreeNode root2) {
dfs(root1, list1);
dfs(root2, list2);
return list1.equals(list2); //第一反應應該要去查一下是否有相應函數,而不是寫邏輯
}
private void dfs(TreeNode node, List<Integer> list) {
if (node == null) return ;
if (node.left == null && node.right == null)
list.add(node.val);
dfs(node.left, list);
dfs(node.right, list);
}
}