题解 | #相逆叶子#
相逆叶子
https://www.nowcoder.com/practice/41c7b0e8710e43ca9f328bf06ea2aff3
大家好,我是开车的阿Q,自动驾驶的时代已经到来,没时间解释了,快和阿Q一起上车。作为自动驾驶系统工程师,必须要有最好的C++基础,让我们来一起刷题吧。
题目考察的知识点
这道题目考察的是二叉树的遍历和叶子节点的提取,同时需要进行逆序的比较操作。
题目解答方法的文字分析
我们使用深度优先搜索(DFS)来遍历两棵树并提取叶子节点,然后对比这两个叶子序列是否逆序相等。
具体步骤如下:
- 实现一个递归的深度优先搜索函数
dfs,用于遍历树并提取叶子节点。 - 在深度优先搜索函数中,对于每个节点,如果其左右子节点都为空,则说明是叶子节点,将其值添加到叶子序列中。
- 分别对两棵树调用深度优先搜索函数,得到两个叶子序列
leaves1和leaves2。 - 反序
leaves2,将其元素顺序逆转。 - 比较
leaves1和逆序后的leaves2是否相等,如果相等则返回true,否则返回false。
本题解析所用的编程语言
C++
完整且正确的编程代码
class Solution {
public:
bool leafSimilar(TreeNode* root1, TreeNode* root2) {
vector<int> leaves1, leaves2;
dfs(root1, leaves1); // 提取第一棵树的叶子序列
dfs(root2, leaves2); // 提取第二棵树的叶子序列
// 将 leaves2 反序
reverse(leaves2.begin(), leaves2.end());
// 比较两个叶子序列是否相等
return leaves1 == leaves2;
}
void dfs(TreeNode* node, vector<int>& leaves) {
if (!node) {
return;
}
if (!node->left && !node->right) {
leaves.push_back(node->val);
return;
}
dfs(node->left, leaves);
dfs(node->right, leaves);
}
};
阿Q的题解 文章被收录于专栏
阿Q秋招刷过的题


基恩士成长空间 440人发布