100
這一題是要比較兩棵樹是不是一模一樣,一模一樣的定義是結構要一樣、而且每個node的value也要一樣。從直觀上來想,就是要走過每一個node,判斷兩邊的node的value、left child跟right child都要一模一樣。
所以如果是要先比較兩棵樹的root node p跟q,就是先比較這兩者的value跟left, right child,如果都一樣,那就再判斷p->left跟q->left;p->right跟q->right一不一樣。只要有不一樣的地方就回傳false。
這樣想一想就已經有個大概的雛型了,接下來把程式的邏輯再想清楚一點。
- 如果兩個root都是NULL,表示兩者一樣,回傳true
- 如果其中一個是NULL,另一個不是,回傳false
- 如果兩個node的val不一樣,回傳false
- 再遞迴呼叫函式來比較node1->left,node1->right跟node2->left,node2->right
想清楚之後,實作出來就OK了。不過如果是要演練面試的話,應該還需要自己去測試一下程式碼有沒有問題:
/**
* 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:
bool isSameTree(TreeNode* p, TreeNode* q) {
if(p == NULL || q == NULL)
{
if(p == NULL && q == NULL)
return true;
else
return false;
}
if(p->val != q->val)
return false;
if(isSameTree(p->left, q->left) == false || isSameTree(p->right, q->right) == false)
return false;
return true;
}
};