题解 | #相逆叶子#
相逆叶子
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秋招刷过的题