判断两棵树是否相同
Posted charls
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了判断两棵树是否相同相关的知识,希望对你有一定的参考价值。
给定两个二叉树,编写一个函数来检验它们是否相同。
如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。
链接:https://leetcode-cn.com/problems/same-tree
1.递归法
class Solution { public: bool Judge(TreeNode* root1,TreeNode* root2) { if(root1==NULL&&root2==NULL) return true; else if(root1==NULL||root2==NULL) return false; if(root1->val!=root2->val) return false; return Judge(root1->left,root2->left)&&Judge(root1->right,root2->right); } bool isSameTree(TreeNode* p, TreeNode* q) { return Judge(p,q); } };
2.非递归法
用队列存,然后逐个比较
class Solution { public: bool isSameTree(TreeNode* p, TreeNode* q) { bool vis=1; if(p==NULL&&q==NULL) return true; else if(p==NULL||q==NULL) return false; queue<TreeNode*> a; queue<TreeNode*> b; a.push(p); b.push(q); while(!a.empty()&&!b.empty()) { if(!vis) break; TreeNode* temp1=a.front(); a.pop(); TreeNode* temp2=b.front(); b.pop(); if(temp1->val!=temp2->val)//两个值不同就退出 { vis=0; break; } else {
//逐个判断子节点格式,并放入 if(temp1->left!=NULL&&temp2->left!=NULL&&temp1->left->val==temp2->left->val) { a.push(temp1->left); b.push(temp2->left); } else if(temp1->left!=NULL||temp2->left!=NULL) { vis=0; break; } if(temp1->right!=NULL&&temp2->right!=NULL&&temp1->right->val==temp2->right->val) { a.push(temp1->right); b.push(temp2->right); } else if(temp1->right!=NULL||temp2->right!=NULL) { vis=0; break; } } } if(vis) return true; else return false; } };
2.队列非递归法
以上是关于判断两棵树是否相同的主要内容,如果未能解决你的问题,请参考以下文章