二叉树结构:
/**
* struct TreeNode {
* int val;
* struct TreeNode *left;
* struct TreeNode *right;
* };
*/
递归:
class Solution {
public:
/**
*
* @param p TreeNode类
* @param q TreeNode类
* @return bool布尔型
*/
bool isSameTree(TreeNode* p, TreeNode* q) {
// write code here
if(p==NULL&&q==NULL) return true;
if(p==NULL||q==NULL) return false;
if(p->val!=q->val) return false;
bool left = isSameTree(p->left, q->left);
bool right = isSameTree(p->right,q->right);
return left&&right;
}
};循环
class Solution {
public:
/**
*
* @param p TreeNode类
* @param q TreeNode类
* @return bool布尔型
*/
bool isSameTree(TreeNode* p, TreeNode* q) {
// write code here
if(p==NULL&&q==NULL) return true;
if(p==NULL||q==NULL) return false;
stack<TreeNode *>a,b;
a.push(p);
b.push(q);
while(!a.empty()&&!b.empty())
{
TreeNode *x = a.top();
TreeNode *y = b.top();
a.pop();
b.pop();
if(x->val!=y->val)
{
return false;
}
if(x->right&&y->right)
{
a.push(x->right);
b.push(y->right);
}
else if(x->right||y->right)
{
return false;
}
if(x->left&&y->left)
{
a.push(x->left);
b.push(y->left);
}
else if(x->left||y->left)
{
return false;
}
}
if(a.empty()&&b.empty()) return true;
else return false;
}
};
循环版思路
建立两个栈a,b,用来存储p和q的节点
根据栈的特性,先存右节点再存左节点,这样取节点时就可以先取左节点再取右节点
并且每次循环都比较节点val,如若有不同则为不相等

京公网安备 11010502036488号