LeetCode 872. 葉子相似的樹
阿新 • • 發佈:2018-12-11
872. 葉子相似的樹
請考慮一顆二叉樹上所有的葉子,這些葉子的值按從左到右的順序排列形成一個 葉值序列 。
舉個例子,如上圖所示,給定一顆葉值序列為 (6, 7, 4, 9, 8)
的樹。
如果有兩顆二叉樹的葉值序列是相同,那麼我們就認為它們是 葉相似 的。
如果給定的兩個頭結點分別為 root1
和 root2
的樹是葉相似的,則返回 true
;否則返回 false
。
解題思路:對於兩棵樹進行遍歷(先序,後序,中序都可以,葉子節點的相對順序是不會變的)把葉子節點進行入隊操作,之後比較兩個佇列中的元素然後進行判斷葉子是否相似。
/** * 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 search(TreeNode* p,queue<int>& Q){ if(p->left != NULL) search(p->left,Q); if(p->right != NULL) search(p->right,Q); if(p->left == NULL && p->right == NULL) Q.push(p->val); } bool leafSimilar(TreeNode* root1, TreeNode* root2) { queue<int>Q; queue<int>Q1; int ans; if(root1 != NULL) search(root1,Q); if(root2 != NULL) search(root2,Q1); if(Q.size() != Q1.size()) return false; else{ ans = 1; while(Q.size() != 0){ if(Q.front() != Q1.front()){ ans = 0; break; } Q.pop(); Q1.pop(); } } if(ans == 1) return true; return false; } };