判斷兩棵樹是否相同


給定兩個二叉樹,編寫一個函數來檢驗它們是否相同。

如果兩個樹在結構上相同,並且節點具有相同的值,則認為它們是相同的。

 

 

鏈接: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.隊列非遞歸法


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM