考察的知识点:二叉树的遍历与叶子结点的对比;
解答方法分析:
- 定义一个辅助函数
getLeaves
,用于获取二叉树的叶子节点值。 - 在
getLeaves
函数中,递归地遍历二叉树,并在遇到叶子节点时将其值加入到leaves
向量中。 - 在
leafSimilar
函数中,分别调用getLeaves
函数来获取两棵二叉树的叶子节点值。 - 将
leaves2
向量逆序后构造一个新的向量,然后与leaves1
向量进行比较,如果相等则返回true,否则返回false。
所用编程语言:C++;
完整编程代码:↓
/** * struct TreeNode { * int val; * struct TreeNode *left; * struct TreeNode *right; * TreeNode(int x) : val(x), left(nullptr), right(nullptr) {} * }; */ class Solution { public: bool leafSimilar(TreeNode* root1, TreeNode* root2) { vector<int> leaves1; vector<int> leaves2; getLeaves(root1, leaves1); getLeaves(root2, leaves2); return leaves1 == vector<int>(leaves2.rbegin(), leaves2.rend()); } private: void getLeaves(TreeNode* root, vector<int>& leaves) { if (root == nullptr) { return; } if (root->left == nullptr && root->right == nullptr) { leaves.push_back(root->val); } getLeaves(root->left, leaves); getLeaves(root->right, leaves); } };