目录
题目:
示例:
分析:
代码:
题目:
示例:
分析:
给我们两棵二叉树,让我们判断这两棵二叉树的从左到右的叶子节点组成的叶子序列是否一致,即从左到右的叶子节点的数值包括顺序是否一致。
那么首先我们知道,叶子节点是左右子树都为空的节点,那么我们可以先把两棵树的叶子节点都给拿出来分别存放在容器里,然后比较这两个容器是否一致即可。
取出叶子节点的方法就是遍历二叉树,然后判断如果一个节点是叶子节点,就把叶子节点的数值存放在相应的容器里。
因为叶子序列是从左到右的叶子节点的数值,那么我们在递归遍历二叉树的时候就要先遍历二叉树的左子树。
可以参考下面的代码和动图理解理解获取叶子节点的方法。
代码:
class Solution {
public:
void find(TreeNode* root,vector<int>& vals){
if(root==nullptr) return ;
if(root->left==nullptr&& root->right==nullptr){
vals.push_back(root->val);
return;
}
find(root->left,vals);
find(root->right,vals);
}
bool leafSimilar(TreeNode* root1, TreeNode* root2) {
vector<int> v1,v2;
find(root1,v1);
find(root2,v2);
return v1==v2;
}
};