872. 叶子相似的树
请考虑一颗二叉树上所有的叶子,这些叶子的值按从左到右的顺序排列形成一个 叶值序列 。
举个例子,如上图所示,给定一颗叶值序列为 (6, 7, 4, 9, 8)
的树。
如果有两颗二叉树的叶值序列是相同,那么我们就认为它们是 叶相似 的。
如果给定的两个头结点分别为 root1
和 root2
的树是叶相似的,则返回 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:
void search(TreeNode* p,queue<int>& Q){
if(p->left != NULL)
search(p->left,Q);
if(p->right != NULL)
search(p->right,Q);
if(p->left == NULL && p->right == NULL)
Q.push(p->val);
}
bool leafSimilar(TreeNode* root1, TreeNode* root2) {
queue<int>Q;
queue<int>Q1;
int ans;
if(root1 != NULL)
search(root1,Q);
if(root2 != NULL)
search(root2,Q1);
if(Q.size() != Q1.size()) return false;
else{
ans = 1;
while(Q.size() != 0){
if(Q.front() != Q1.front()){
ans = 0;
break;
}
Q.pop();
Q1.pop();
}
}
if(ans == 1) return true;
return false;
}
};