Skip to main content
Back to problems
#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)
LeetCode
solution.rs
/*
 * 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
  }
}