方法一:使用递归的方法
/** * Definition for a binary tree node. * 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(!p && !q) return true; else if(!p || !q) return false; return (p->val == q->val) && isSameTree(p->left, q->left) && isSameTree(p->right, q->right); } };
方法二:使用非递归的方法,前序遍历一一比较
/** * Definition for a binary tree node. * 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) { stack<TreeNode *> s; s.push(q); s.push(p); while(!s.empty()) { TreeNode *pTmp = s.top(); s.pop(); TreeNode *qTmp = s.top(); s.pop(); if(!pTmp && ! qTmp) continue; if(!pTmp || !qTmp) return false; if(pTmp->val == qTmp->val) { s.push(qTmp->right); s.push(pTmp->right); s.push(qTmp->left); s.push(pTmp->left); } else return false; } return true; } };
原文:http://www.cnblogs.com/chengyuz/p/6713611.html