1. 程式人生 > 實用技巧 >深度優先搜尋:葉子相似的樹

深度優先搜尋:葉子相似的樹

問題:請考慮一顆二叉樹上所有的葉子,這些葉子的值從左到右的順序排列形成一個葉值序列

舉個例子,如上圖所示,給定一顆葉值序列為(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); //深度搜索右節點   } };