#872
Easy Algorithms Leaf similar trees
Tree Depth-First Search Binary Tree
70.2% acceptance
Feb 27, 2026
4367
125
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.
Solution
Rust
Time O(n)
Space O(n)
/*
* 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.
* Example 1:
* Input: root1 = [3,5,1,6,2,9,8,null,null,7,4], root2 = [3,5,1,6,7,4,2,null,null,null,null,null,null,9,8]
* Output: true
* Example 2:
* Input: root1 = [1,2,3], root2 = [1,3,2]
* Output: false
* Constraints:
* The number of nodes in each tree will be in the range [1, 200].
* Both of the given trees will have values in the range [0, 200].
*/
use std::rc::Rc;
use std::cell::RefCell;
impl Solution {
fn leaves(root: &Option<Rc<RefCell<TreeNode>>>, seq: &mut Vec<i32>) {
if let Some(node) = root {
let n = node.borrow();
if n.left.is_none() && n.right.is_none() {
seq.push(n.val);
} else {
Self::leaves(&n.left, seq);
Self::leaves(&n.right, seq);
}
}
}
pub fn leaf_similar(root1: Option<Rc<RefCell<TreeNode>>>, root2: Option<Rc<RefCell<TreeNode>>>) -> bool {
let mut s1 = Vec::new();
let mut s2 = Vec::new();
Self::leaves(&root1, &mut s1);
Self::leaves(&root2, &mut s2);
s1 == s2
}
}