[LeetCode]Same Tree解题

来源:互联网 发布:数据资源建设思路 编辑:程序博客网 时间:2024/06/06 07:46

题意:给出两个二叉树,提供算法来判断这两个二叉树是否相同,这里的相同包含树的Node数量及树的结构相同,以及树Node的Value相同

分析:题目很基础 ,就是二叉树的遍历,同时遍历两个二叉树

边界条件:如果两个Node都为空,则为相同;如果两个Node一个为空,则不相同,否则,依据value来判定是否相同。

方法1:代码比较简单的实现就是递归实现,先判断树根Node是否相同,如果相同,则分别判断左、右孩子节点的值,如此递归下去。

bool isSameTree(TreeNode *p, TreeNode *q) {// Start typing your C/C++ solution below// DO NOT write int main() functionif(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);}

此种方式实质上是采用深度遍历的思想。


方法2:用广度遍历的思想,采用循环的方式来遍历二叉树。代码如下:

bool isSameTree(TreeNode *p, TreeNode *q) {// Start typing your C/C++ solution below// DO NOT write int main() functionif (p == NULL && q == NULL){return true;}else{if (!IsEqualNode(p, q)){return false;}}queue<TreeNode *> pQueue = queue<TreeNode *>();queue<TreeNode *> qQueue = queue<TreeNode *>();pQueue.push(p);qQueue.push(q);while(!pQueue.empty() && !qQueue.empty()){TreeNode * pnode = pQueue.front();TreeNode * qnode = qQueue.front();pQueue.pop();qQueue.pop();if (!IsEqualNode(pnode, qnode)){return false;}if (pnode->left || qnode->left){pQueue.push(pnode->left);qQueue.push(qnode->left);}if (pnode->right || qnode->right){pQueue.push(pnode->right);qQueue.push(qnode->right);}}if (pQueue.empty() && qQueue.empty()){return true;}else{return false;}}bool IsEqualNode(TreeNode * p, TreeNode * q){if (p == NULL || q == NULL){if ((p == NULL) ^ (q == NULL)){return false;}else{return true;}}else{if(p->val == q->val){return true;}else{return false;}}}

此方式AC完美通过,耗时16ms。


原创粉丝点击