872. Leaf-Similar Trees - Easy
Consider all the leaves of a binary tree. From left to right order, the values of those leaves form a leaf value sequence.
For example, in the given tree above, the leaf value sequence is (6, 7, 4, 9, 8)
.
Two binary trees are considered leaf-similar if their leaf value sequence is the same.
Return true
if and only if the two given trees with head nodes root1
and root2
are leaf-similar.
Note:
- Both of the given trees will have between
1
and100
nodes.
M1: 把两个树的leaf都存下来,再比较
time: O(n), space: O(logn)
/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */ class Solution { public boolean leafSimilar(TreeNode root1, TreeNode root2) { if(root1 == null && root2 == null) { return true; } if(root1 == null || root2 == null) { return false; } List<Integer> l1 = leaves(root1, new ArrayList<>()); List<Integer> l2 = leaves(root2, new ArrayList<>()); return l1.equals(l2); } public List<Integer> leaves(TreeNode root, List<Integer> list) { if(root == null) { return null; } if(root.left == null && root.right == null) { list.add(root.val); } leaves(root.left, list); leaves(root.right, list); return list; } }
M2: 用一个stack记录dfs的路径,一旦dfs过程中有对应leaf的值不相等就可以退出dfs,直接返回false,而不必走完全程
time: O(n), space: O(logn)
/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */ class Solution { public boolean leafSimilar(TreeNode root1, TreeNode root2) { if(root1 == null && root2 == null) { return true; } if(root1 == null || root2 == null) { return false; } Stack<TreeNode> s1 = new Stack<>(), s2 = new Stack<>(); s1.push(root1); s2.push(root2); while(!s1.isEmpty() && !s2.isEmpty()) { if(getLeaf(s1) != getLeaf(s2)) { return false; } } return s1.isEmpty() && s2.isEmpty(); } public int getLeaf(Stack<TreeNode> s) { while(true) { TreeNode t = s.pop(); if(t.left == null && t.right == null) { return t.val; } if(t.right != null) { s.push(t.right); } if(t.left != null) { s.push(t.left); } } } }