层次遍历
- 真值表
- p、q两棵树的结点只有在以上四种结点存在位置的情况下,才有可能相等,当且仅当结点存在且对应位置结点值相等时,两棵树相等。
- 注意空结点入队后,队不为空。
- 代码
class Solution {
public:
bool isSameTree(TreeNode* p, TreeNode* q) {
if(!p && !q) return true;
if(!p && q || !q && p) return false;
queue<TreeNode*> queue1;
queue<TreeNode*> queue2;
TreeNode *temp_p, *temp_q;
queue1.push(p); queue2.push(q);
while(!queue1.empty() && !queue2.empty()){
temp_p = queue1.front(); queue1.pop();
temp_q = queue2.front(); queue2.pop();
if(temp_p->val != temp_q->val) return false;
if((temp_p->left && !temp_q->left) || (!temp_p->left && temp_q->left))
return false;
if((temp_p->right && !temp_q->right) || (!temp_p->right && temp_q->right))
return false;
if(temp_p->left) queue1.push(temp_p->left);
if(temp_p->right) queue1.push(temp_p->right);
if(temp_q->left) queue2.push(temp_q->left);
if(temp_q->right) queue2.push(temp_q->right);
}
if(queue1.empty() && queue2.empty()) return true;
else return false;
}
};
递归
递归是一个更为简洁的解法。
在这里插入代码片