872. Leaf-Similar Trees

Description of Problem

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].

Solution

Tags: Binary Tree DFS

Explanation

Append the node value when the node is leaf.

Code

// Definition for a binary tree node.
// #[derive(Debug, PartialEq, Eq)]
// pub struct TreeNode {
//   pub val: i32,
//   pub left: Option<Rc<RefCell<TreeNode>>>,
//   pub right: Option<Rc<RefCell<TreeNode>>>,
// }
// 
// impl TreeNode {
//   #[inline]
//   pub fn new(val: i32) -> Self {
//     TreeNode {
//       val,
//       left: None,
//       right: None
//     }
//   }
// }
use std::rc::Rc;
use std::cell::RefCell;
impl Solution {
    pub fn leaf_similar(root1: Option<Rc<RefCell<TreeNode>>>, root2: Option<Rc<RefCell<TreeNode>>>) -> bool {
        let mut v1 = vec![];
        let mut v2 = vec![];
        Self::dfs(root1, &mut v1); 
        Self::dfs(root2, &mut v2);
        return v1==v2;
    }

    fn dfs(node: Option<Rc<RefCell<TreeNode>>>, v : &mut Vec<i32> ) {
        if let Some(n) = node.clone() {
            let n = n.borrow();
            let left = n.left.clone();
            let right = n.right.clone();
            
            if left.is_none() && right.is_none(){
                v.push(n.val);
            }else {
                Self::dfs(left, v);
                Self::dfs(right, v);
            }
        }
    }
}

Complexity

  • n is the number of nodes in the tree
  • h is the height of the tree

Time complexity:

  • \( T(n) = \Theta(n) \)

Auxiliary Space:

  • \( S(n) = O(h) \)