一:解题思路
因为树是递归定义的,所以与二叉树的相关操作都可以用递归的方法来解决。用递归的方法来解决,从本质上看也就可以用迭代的方法来解决。这道题目与之前博客的p4(判断二叉树是否对称)几乎是一模一样的。这道题的难度在于,用迭代法求解这个题目,用一个栈来存储树节点。
二:完整代码示例 (C++版和Java版)
递归C++版:
class Solution
{
public:
bool isSameTree(TreeNode* p, TreeNode* q)
{
if (p == NULL && q == NULL) return true;
if (p == NULL || q == NULL) return false;
return (p->val==q->val) &&
(isSameTree(p->left,q->left)) &&
(isSameTree(p->right,q->right));
}
};
递归Java版:
class Solution {
public boolean isSameTree(TreeNode p, TreeNode q)
{
if(p==null&&q==null) return true;
if(p==null||q==null) return false;
return (p.val==q.val)&&
(isSameTree(p.left,q.left))&&
(isSameTree(p.right,q.right));
}
}
C++迭代版:
class Solution
{
public:
bool isSameTree(TreeNode* p, TreeNode* q)
{
stack<TreeNode*> stack;
stack.push(p);
stack.push(q);
while (!stack.empty())
{
TreeNode* s = stack.top();
stack.pop();
TreeNode* t = stack.top();
stack.pop();
if (s == NULL && t == NULL) continue;
if (s == NULL || t == NULL) return false;
if (s->val != t->val) return false;
stack.push(s->left);
stack.push(t->left);
stack.push(s->right);
stack.push(t->right);
}
return true;
}
};
Java迭代版:
class Solution
{
public boolean isSameTree(TreeNode p, TreeNode q)
{
Stack<TreeNode> stack=new Stack<>();
stack.push(p);
stack.push(q);
while(!stack.empty())
{
TreeNode s=stack.pop();
TreeNode t=stack.pop();
if(s==null&&t==null) continue;
if(s==null||t==null) return false;
if(s.val!=t.val) return false;
stack.push(s.left);
stack.push(t.left);
stack.push(s.right);
stack.push(t.right);
}
return true;
}
}
来源:https://www.cnblogs.com/repinkply/p/12442979.html