Skip to main content

872. Leaf-Similar Trees

https://leetcode.com/problems/leaf-similar-trees

Python

DFS

class Solution:
def leafSimilar(self, root1: Optional[TreeNode], root2: Optional[TreeNode]) -> bool:
def dfs(node):
if not node:
return []

if not node.left and not node.right:
return [node.val]

return dfs(node.left) + dfs(node.right)

return dfs(root1) == dfs(root2)

Rust

DFS

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 {
fn dfs(node: Option<Rc<RefCell<TreeNode>>>) -> Vec<i32> {
match node {
None => Vec::new(),
Some(node) => {
let node = node.borrow();
if node.left.is_none() && node.right.is_none() {
return vec![node.val];
}
let mut leaves = Vec::new();
leaves.extend(dfs(node.left.clone()));
leaves.extend(dfs(node.right.clone()));
leaves
}
}
}
dfs(root1) == dfs(root2)
}
}