1. 程式人生 > 實用技巧 >100. 相同的樹 - 8月7日

100. 相同的樹 - 8月7日

題目

100. 相同的樹

我的思路實現

兩棵樹同時遍歷,比較 1.深度優先,遞迴 2.廣度優先,佇列
/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode() : val(0), left(nullptr), right(nullptr) {}
 *     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
 *     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
 * };
 
*/ class Solution { public: bool isSameTree(TreeNode* p, TreeNode* q) { vector<TreeNode *> Q1; vector<TreeNode *> Q2; Q1.push_back(p); Q2.push_back(q); TreeNode * temp1; TreeNode * temp2; while(!Q1.empty()) { temp1
= Q1.front(); Q1.erase(Q1.begin()); if(Q2.empty()) return false; temp2 = Q2.front(); Q2.erase(Q2.begin()); if(temp1==NULL && temp2==NULL) { continue; } else if(temp1==NULL||temp2==NULL) {
return false; } else if(temp1->val==temp2->val) { Q1.push_back(temp1->left); Q2.push_back(temp2->left); Q1.push_back(temp1->right); Q2.push_back(temp2->right); } else{ return false; } } if(Q2.empty()) return true; else return false; } }; /* 兩棵樹同時遍歷,比較 1.深度優先,遞迴 class Solution { public: bool compare(TreeNode *t1,TreeNode *t2) { if(t1==NULL && t2==NULL) { return true; } else if(t1==NULL ||t2==NULL) { return false; } else if(t1->val!=t2->val) { return false; } else if(t1->val==t2->val) { if(compare(t1->left,t2->left)) return compare(t1->right,t2->right); else return false; } return false; } bool isSameTree(TreeNode* p, TreeNode* q) { return compare(p,q); } }; 2.廣度優先,佇列 class Solution { public: bool isSameTree(TreeNode* p, TreeNode* q) { vector<TreeNode *> Q1; vector<TreeNode *> Q2; Q1.push_back(p); Q2.push_back(q); TreeNode * temp1; TreeNode * temp2; while(!Q1.empty()) { temp1 = Q1.front(); Q1.erase(Q1.begin()); if(Q2.empty()) return false; temp2 = Q2.front(); Q2.erase(Q2.begin()); if(temp1==NULL && temp2==NULL) { continue; } else if(temp1==NULL||temp2==NULL) { return false; } else if(temp1->val==temp2->val) { Q1.push_back(temp1->left); Q2.push_back(temp2->left); Q1.push_back(temp1->right); Q2.push_back(temp2->right); } else{ return false; } } if(Q2.empty()) return true; else return false; } }; */

拓展學習