首先可以用DFS深搜的递归方法来做
public class SameTree {
public boolean isSameTree(TreeNode p, TreeNode q) {
if(!p&&!q)
{
return true;
}
if(!p&&q||!q&&p||p.val!=q.val)
{
return false;
}
return (isSameTree(p->left,q->left)&&isSameTree(q->right,q->right));
}
}
也可用非递归方法,用一个栈来对两个节点进行比较,这里以前序为例
class Solution {
public:
bool isSameTree(TreeNode* p, TreeNode* q) {
stack<TreeNode*> st;
st.push(p); st.push(q);
while (!st.empty()) {
p = st.top(); st.pop();
q = st.top(); st.pop();
if (!p && !q) continue;
if ((p && !q) || (!p && q) || (p->val != q->val)) return false;
st.push(p->right); st.push(q->right);
st.push(p->left); st.push(q->left);
}
return true;
}
};