请考虑一颗二叉树上所有的叶子,这些叶子的值按从左到右的顺序排列形成一个 叶值序列 。
举个例子,如上图所示,给定一颗叶值序列为 (6, 7, 4, 9, 8)
的树。
如果有两颗二叉树的叶值序列是相同,那么我们就认为它们是 叶相似 的。
如果给定的两个头结点分别为 root1
和 root2
的树是叶相似的,则返回 true
;否则返回 false
。
提示:
给定的两颗树可能会有 1
到 100
个结点。
C
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* struct TreeNode *left;
* struct TreeNode *right;
* };
*/
void func(struct TreeNode* root, int* tmp, int* k)
{
if(root)
{
if(NULL==root->left && NULL==root->right)
{
tmp[*k]=root->val;
(*k)++;
}
else
{
func(root->left,tmp,k);
func(root->right,tmp,k);
}
}
}
bool leafSimilar(struct TreeNode* root1, struct TreeNode* root2)
{
int* tmp1=(int*)malloc(sizeof(int)*100);
int* tmp2=(int*)malloc(sizeof(int)*100);
int k1=0;
int k2=0;
func(root1,tmp1,&k1);
func(root2,tmp2,&k2);
if(k1==k2)
{
for(int i=0;i<k1;i++)
{
if(tmp1[i]!=tmp2[i])
{
return false;
}
}
return true;
}
return false;
}
C++
/**
* 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 func(TreeNode* root, vector<int>& tmp)
{
if(root)
{
if(NULL==root->left && NULL==root->right)
{
tmp.push_back(root->val);
}
else
{
func(root->left,tmp);
func(root->right,tmp);
}
}
}
bool leafSimilar(TreeNode* root1, TreeNode* root2)
{
vector<int> tmp1;
vector<int> tmp2;
func(root1,tmp1);
func(root2,tmp2);
if(tmp1==tmp2)
{
return true;
}
else
{
return false;
}
}
};
python
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution:
def func(self, root, tmp):
if root:
if None==root.left and None==root.right:
tmp.append(root.val)
else:
tmp=self.func(root.left,tmp)
tmp=self.func(root.right,tmp)
return tmp
def leafSimilar(self, root1: TreeNode, root2: TreeNode) -> bool:
tmp1=[]
tmp2=[]
tmp1=self.func(root1,tmp1)
tmp2=self.func(root2,tmp2)
return tmp1==tmp2