深度优先搜索:叶子相似的树

问题:请考虑一颗二叉树上所有的叶子,这些叶子的值从左到右的顺序排列形成一个叶值序列

举个例子,如上图所示,给定一颗叶值序列为(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); //深度搜索右节点   } };

 

posted @ 2020-10-05 14:13  青团青  阅读(172)  评论(0编辑  收藏  举报