题目链接:https://leetcode.com/problems/same-tree/
Runtimes:3ms
1、问题
Given two binary trees, write a function to check if they are equal or not.
Two binary trees are considered equal if they are structurally identical and the nodes have the same value.
2、分析
同时采用相同的遍历操作进行扫描,值不等返回false,或者左右子树存在情况不同返回false。其余情况返回true。
3、总结
陷阱:出现左右子树存在不同的情况,比如{1, 2, 3, 15}, {1, 2, 3, #, #, 15}
4、实现
/**
* Definition for binary tree
* 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(NULL == p && NULL == q)
return true;
else if(NULL == p || NULL == q)
return false;
vector <TreeNode *> v1;
vector <TreeNode *> v2;
v1.push_back(p);
v2.push_back(q);
while(v1.size() > 0 && v2.size() > 0)
{
TreeNode *p1 = v1.back(); v1.pop_back();
TreeNode *p2 = v2.back(); v2.pop_back();
if(p1->val != p2->val)
return false;
if(NULL != p1->left && NULL != p2->left)
{
v1.push_back(p1->left);
v2.push_back(p2->left);
}else if(NULL == p1->left && NULL == p2->left)
{
}else
return false;
if(NULL != p1->right && NULL != p2->right)
{
v1.push_back(p1->right);
v2.push_back(p2->right);
}else if(NULL == p1->right && NULL == p2->right)
{
}else
return false;
}
return true;
}
};
5、反思
速度不错啦,比较简单的题目。