深度優先搜尋:葉子相似的樹
阿新 • • 發佈:2020-10-05
問題:請考慮一顆二叉樹上所有的葉子,這些葉子的值從左到右的順序排列形成一個葉值序列
舉個例子,如上圖所示,給定一顆葉值序列為(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); //深度搜索右節點
}
};