叶子相似的树
题解
首先理解题意,其实要求的就是从左到右的叶子结点的数值是相同的,这也是根本性要求。
题中信息:
-
给定二叉树的所有数值
2.排列顺序给定,就是 根->左 ->右
结果要求:
返回值为 true 或者 false, 也就是root1和root2是否为叶子相似树。
我们这里的解题思路,根据递归的方式来进行二叉树叶子结点的查找,然后进行对比,得出结果。
其实使用二叉树的先序遍历也可以做。
/**
* 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 leafval(vector<int> &leafArry,TreeNode*root)
{
if(root!=NULL)
{
if(root->right==NULL&&root->left==NULL)
leafArry.push_back(root->val); // 压栈
leafval(leafArry,root->right); //递归右节点
leafval(leafArry,root->left); //递归左节点
}
}
bool leafSimilar(TreeNode* root1, TreeNode* root2) {
vector<int>leafArry1;
vector<int>leafArry2;
leafval(leafArry1,root1); // 得到叶子结点的结果
leafval(leafArry2,root2);
//sort(leafArry1.begin(),leafArry1.end());
//sort(leafArry2.begin(),leafArry2.end());
if(leafArry1.size()==leafArry2.size())
{
for(int i=0;i<leafArry1.size();i++)
if(leafArry1[i]!=leafArry2[i]) return false;
}
else
return false;
return true;
}
};