一:解题思路
因为树是递归定义的,所以与二叉树的相关操作都可以用递归的方法来解决。用递归的方法来解决,从本质上看也就可以用迭代的方法来解决。这道题目与之前博客的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