872.Leaf-Similar Trees
题目链接:原题
题目大意:
比较两个二叉树的所有叶子结点是否相同(顺序和数值均相同),如果相同,则返回True,否则返回False。
思路:
采用DFS(Depth-First-Search)遍历得到二叉树的所有叶子节点,并按照顺序存入数组中,最后比较两个数组是否相同,如果相同,则返回True,否则返回False。
代码:
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
bool leafSimilar(TreeNode* root1, TreeNode* root2) {
vector<int> leaf1,leaf2;
DFS( root1 , leaf1 );
DFS( root2 , leaf2 );
return leaf1 == leaf2;
}
void DFS( TreeNode *root , vector<int> &leaf ){
if( !root ) return;
if( !root->left && !root->right ) leaf.push_back( root->val );
DFS( root->left , leaf );
DFS( root->right , leaf );
}
};