解题思路:
- 先将两棵树的叶子结点从左到右取出来存入数组中,再比较两个数组是否一致;
- 使用深度优先遍历搜索每一个叶子结点,从左到右的顺序访问每片叶子,因为在右孩子结点之前完全探索了左孩子结点;
C++实现如下:
class Solution {
public:
bool leafSimilar(TreeNode* root1, TreeNode* root2)
{
vector<int> leaves1;
vector<int> leaves2;
dfs(root1, leaves1);
dfs(root2, leaves2);
return leaves1 == leaves2;
}
void dfs(TreeNode* root, vector<int>& leaves)
{
if(root == NULL)
return;
if(root->left == NULL && root->right == NULL)
leaves.push_back(root->val);
dfs(root->left, leaves);
dfs(root->right, leaves);
}
};