判断两棵树是否相同

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.队列非递归法

以上是关于判断两棵树是否相同的主要内容,如果未能解决你的问题,请参考以下文章

判断两棵树是否相同

相关二叉树习题整理

相关二叉树习题整理

二叉树-- 相同的树

二叉树oj ----> 另一棵树的子树

检查两棵树是不是相同