Task:
思路與算算實現
對樹有個稍微的瞭解先,看代碼裏給的定義:
可以看出樹
- 有值:val;
- 有左右節點:left 和right;
- 有形式:節點:結點值、左孩子、右孩子、
那麼題目要求就是兩個樹一樣,那就節點,左孩子,右孩子都一樣!
所以首先邊界檢查:
(1)兩個樹都是空的,那沒錯了就是一毛一樣;
(2)如果都不空且值還相等,那就用遞歸的形式再去判斷:這裏條件就是看這個節點的左子樹和右子樹是否一樣,就這樣一直遞歸到頁節點!
(3)如果不滿足(2)中的判定條件(都不爲空,並且值相等),那就說明出現異常不相等了,直接返回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:
bool isSameTree(TreeNode* p, TreeNode* q) {
if(p==NULL && q==NULL) return true;
if(p!=NULL && q!=NULL && p->val == q->val){
return isSameTree(p->left, q->left) && isSameTree(p->right, q->right);
}else{
return false;
}
}
};
提交結果: