【Leetcode】872. 葉子相似的樹
阿新 • • 發佈:2019-02-18
題目描述:
考慮一個二叉樹的所有葉子。這些葉子的值按從左到右的順序排列形成一個 葉值序列 。
舉個例子,給定一個如上圖所示的樹,其葉值序列為 (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; } };