列表

详情


NC315. 相同的二叉树

描述

给定两个根结点分别为 root1root2 二叉树,请判断这两棵树是否完全相同。
数据范围:

两棵树上的节点数目都在范围 [0, 100] 内


示例1

输入:

{1,2,1},{1,#,2}

输出:

false

说明:



两个树在结构上不相同,故它们是不相同的。

示例2

输入:

{1,2,1},{1,2,1}

输出:

true

说明:

两个树在结构上相同,并且节点具有相同的值,故认为它们是相同的。

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

C++ 解法, 执行用时: 3ms, 内存消耗: 408KB, 提交时间: 2022-07-07

/**
 * struct TreeNode {
 *	int val;
 *	struct TreeNode *left;
 *	struct TreeNode *right;
 *	TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
 * };
 */
class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param root1 TreeNode类 
     * @param root2 TreeNode类 
     * @return bool布尔型
     */
    bool isSameTree(TreeNode* root1, TreeNode* root2) {
        // write code here
        
        if(root1 && root2 && root1->val != root2->val) return false;
        if(root1==nullptr && root2 != nullptr) return false;
        if(root1!=nullptr && root2 == nullptr) return false;
        if(!root1 && !root1) return true;
        queue<TreeNode*>q1;
        queue<TreeNode*>q2;
        q1.push(root1);
        q2.push(root2);
        
        while(!q1.empty() && !q2.empty())
        {
            TreeNode* p1 = q1.front();
            TreeNode* p2 = q2.front();
            q1.pop();
            q2.pop();
            
            if(p1->left && p2->left && p1->left->val==p2->left->val)
            {
                 q1.push(p1->left);
                 q2.push(p2->left);
            }
            else if(p1->left && p2->left && p1->left->val!=p2->left->val)
                return false;
      
            if(p1->right && p2->right && p1->right->val==p2->right->val)
            {
                 q1.push(p1->right);
                 q2.push(p2->right);
            }
            else if(p1->right && p2->right && p1->right->val!=p2->right->val)
                return false;
        }
        
        if(q1.empty() && q2.empty())
        return true;
        else
        return false;
    }
};

C++ 解法, 执行用时: 3ms, 内存消耗: 408KB, 提交时间: 2022-03-05

/**
 * struct TreeNode {
 *	int val;
 *	struct TreeNode *left;
 *	struct TreeNode *right;
 *	TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
 * };
 */
class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param root1 TreeNode类 
     * @param root2 TreeNode类 
     * @return bool布尔型
     */
    bool order(TreeNode* &root1, TreeNode* &root2){
        if(root1 == nullptr && root2 ==nullptr)return true;
        if(root1 == nullptr || root2 ==nullptr)return false;
        if(root1->val==root2->val && order(root1->left, root2->left) && order(root1->right, root2->right)){
            return true;
        }
        return false;
    }
    bool isSameTree(TreeNode* root1, TreeNode* root2) {
        // write code here
        return order(root1, root2);
    }
};

C++ 解法, 执行用时: 3ms, 内存消耗: 412KB, 提交时间: 2022-08-06

/**
 * struct TreeNode {
 *	int val;
 *	struct TreeNode *left;
 *	struct TreeNode *right;
 *	TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
 * };
 */
class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param root1 TreeNode类 
     * @param root2 TreeNode类 
     * @return bool布尔型
     */
    int judge(TreeNode *root)
	{
		return(root==NULL)?0:1;
	}
    bool isSameTree(TreeNode* root1, TreeNode* root2) {
        vector<vector<int>>res;
        queue<TreeNode *>q;
        if(root1==NULL&&root2==NULL)return true;
        if(judge(root1)!=judge(root2))return false;
        q.push(root1);
        q.push(root2);
        while(!q.empty())
        {
        	int n=q.size()/2;
        	vector<int>temp;
        	for(int i=0;i<n;i++)
        	{
        		TreeNode *leef=q.front();q.pop();
        		TreeNode *leef2=q.front();q.pop();
        		if(leef->val!=leef2->val)return false;//值不一样 
        		if(judge(leef->left)!=judge(leef->left))return false;//结构不一样 
        		if(judge(leef->right)!=judge(leef->right))return false;//结构不一样 
				if(leef->left&&leef2->left)
        		{
        			q.push(leef->left);
        			q.push(leef2->left);
				}
				if(leef->right&&leef2->right)
        		{
        			q.push(leef->right);
        			q.push(leef2->right);
				}
			}
		}
		return true;
    }
};

C++ 解法, 执行用时: 3ms, 内存消耗: 416KB, 提交时间: 2022-05-04

/**
 * struct TreeNode {
 *	int val;
 *	struct TreeNode *left;
 *	struct TreeNode *right;
 *	TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
 * };
 */
class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param root1 TreeNode类 
     * @param root2 TreeNode类 
     * @return bool布尔型
     */
    bool isSameTree(TreeNode* root1, TreeNode* root2) {
        // write code here
        if(root1==nullptr&&root2==nullptr){
            return true;
        }
        if(root1==nullptr||root2==nullptr){
            return false;
        }
        if(root1->val!=root2->val) return false;
        return isSameTree(root1->left, root2->left)&&isSameTree(root1->right, root2->right);
    }
};

C++ 解法, 执行用时: 3ms, 内存消耗: 416KB, 提交时间: 2022-03-17

/**
 * struct TreeNode {
 *	int val;
 *	struct TreeNode *left;
 *	struct TreeNode *right;
 *	TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
 * };
 */
class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param root1 TreeNode类 
     * @param root2 TreeNode类 
     * @return bool布尔型
     */
    bool isSameTree(TreeNode* root1, TreeNode* root2) {
        // write code here
        if(root1==NULL&&root2==NULL){
            return true;
        }
        if(root1==NULL||root2==NULL){
            return false;
        }
        if(root1->val==root2->val){
            return isSameTree(root1->left, root2->left)&&isSameTree(root1->right, root2->right);
        }else{
            return false;
        }
    }
};

上一题