深度优先搜索:叶子相似的树
问题:请考虑一颗二叉树上所有的叶子,这些叶子的值从左到右的顺序排列形成一个叶值序列
举个例子,如上图所示,给定一颗叶值序列为(6,7,4,9,8)的树。
如果有两颗二叉树的叶值序列相同,那么我们就认为它们是叶相似的。
如果给定的两个头结点分别为 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], root2 = [1]
输出:true
示例3:
输入:root1 = [1],root2 = [2]
输出:false
示例4:
输入:root1 = [1,2,3],root2=[1,3,2]
输出:false
利用C++解决如上问题
struct TreeNode{
TreeNode *left;
TreeNode *right;
int val;
};
class Solution{
public:
bool leafSimilar(TreeNode *root1, TreeNode *root2)
{
vector<int> leaf1;
vector<int> leaf2;
dfs(root1, leaf1);
dfs(root2, leaf2);
return leaf1 == leaf2;
}
void dfs(TreeNode *root, vector<int> &leaf)
{
if(root = nullptr)
return ;
if(root->left == nullptr && root->right == nullptr)
{
leaf.push_back(val);
return ;
}
dfs(root->left); //深度搜索左节点
dfs(root->right); //深度搜索右节点
}
};