请考虑一棵二叉树上所有的叶子,这些叶子的值按从左到右的顺序排列形成一个 叶值序列。
如果有两棵二叉树的叶值序列是相同,那么我们就认为它们是 叶相似的。
如果给定的两个根结点分别为 root1
和 root2
的树是叶相似的,则返回 true
;否则返回 false
。
示例 1:
输入:root1 = [3,5,1,6,2,9,8,null,null,7,4], root2 = [3,5,1,6,7,4,2,null,null,null,null,null,null,9,8]
输出:true
示例 2:
输入:root1 = [1,2,3], root2 = [1,3,2]
输出:false
代码:
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* struct TreeNode *left;
* struct TreeNode *right;
* };
*/
void Find(struct TreeNode* root,int* num,int* count){
if(root==NULL){
return;
}
if(root->left==NULL&&root->right==NULL){
num[(*count)++]=root->val;
return;
}
Find(root->left,num,count);
Find(root->right,num,count);
return;
}
bool leafSimilar(struct TreeNode* root1, struct TreeNode* root2) {
int num1[201];//存储第一棵树的叶子结点
int num2[201];//存储第二棵树的叶子结点
int count1=0;//记录num1中叶子结点个数
int count2=0;//记录num2中叶子结点个数
Find(root1,num1,&count1);//统计第一颗树的叶子数
Find(root2,num2,&count2);//统计第二颗树的叶子数
if(count1!=count2){
return false;
}else{
for(int i=0;i< count1;i++){
if (num1[i]!= num2[i]){
return false;
}
}
return true;
}
}