872. 叶子相似的树
分析
- 深度优先搜索 (DFS):
- 使用递归遍历二叉树
- 如果当前节点是叶子节点(没有左子节点和右子节点),将其值加入到结果序列中
- 如果不是叶子节点,则递归遍历其左子树和右子树
- 提取叶值序列:
- 对
root1
和root2
分别进行深度优先搜索,提取两个叶值序列
- 对
- 比较序列:
- 判断两个序列是否相等,如果相等则返回
true
,否则返回false
- 判断两个序列是否相等,如果相等则返回
时间复杂度
- 深度优先搜索:
- 对每棵树的所有节点遍历一次,时间复杂度为
O(n)
,其中n
是节点数量
- 对每棵树的所有节点遍历一次,时间复杂度为
- 比较序列:
- 比较两个序列,时间复杂度为
O(min(n, m))
,其中n
和m
分别为两棵树叶子节点的数量
- 比较两个序列,时间复杂度为
总体时间复杂度为 O(n)
空间复杂度
- 递归调用栈:
- 在最坏情况下(树的深度为树的高度),递归调用栈需要
O(h)
的空间,其中h
是树的高度
- 在最坏情况下(树的深度为树的高度),递归调用栈需要
- 存储叶值序列:
- 每棵树的叶子节点最多为树节点总数的一半,存储序列的空间复杂度为
O(n)
- 每棵树的叶子节点最多为树节点总数的一半,存储序列的空间复杂度为
总体空间复杂度为 O(n)
C++代码
|
|