1. 程式人生 > >【Leetcode】872. 葉子相似的樹

【Leetcode】872. 葉子相似的樹

題目描述:

考慮一個二叉樹的所有葉子。這些葉子的值按從左到右的順序排列形成一個 葉值序列 。

舉個例子,給定一個如上圖所示的樹,其葉值序列為 (6, 7, 4, 9, 8) 。

如果兩個二叉樹的葉值序列相同,我們就認為它們是 葉相似的

如果給定的兩個頭結點分別為 root1 和 root2 的樹是葉相似的,返回 true;否則返回 false 。

提示:

  • 給定的兩個樹會有 1 到 100 個結點。

解題思路:

本題題目比較清晰(我已開始還理解錯了,以為是任意順序的,汗!),只要找到二叉樹的葉值序列,再逐個比較是否相等就好了。使用遞迴的方式查詢二叉樹所有葉子結點,程式碼比較精簡。

AC程式碼:

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 * };
 */
class Solution {
public:
    void leafval(vector<int> &leafArry,TreeNode*root)
    {
        if(root!=NULL)
        {
            if(root->right==NULL&&root->left==NULL)
                leafArry.push_back(root->val);
            leafval(leafArry,root->right);
            leafval(leafArry,root->left);
        }
    }
    
    bool leafSimilar(TreeNode* root1, TreeNode* root2) {
        vector<int>leafArry1;
        vector<int>leafArry2;
        leafval(leafArry1,root1);
        leafval(leafArry2,root2);
        
        //sort(leafArry1.begin(),leafArry1.end());
        //sort(leafArry2.begin(),leafArry2.end());
        
        if(leafArry1.size()==leafArry2.size())
        {
            for(int i=0;i<leafArry1.size();i++)
                if(leafArry1[i]!=leafArry2[i]) return false;            
        }
        else
            return false;
        return true;
    }
};