列表

详情


OR55. 拓扑结构相同子树

描述

对于两棵彼此独立的二叉树A和B,请编写一个高效算法,检查A中是否存在一棵子树与B树的拓扑结构完全相同。

给定两棵二叉树的头结点AB,请返回一个bool值,代表A中是否存在一棵同构于B的子树。

原站题解

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

C++ 解法, 执行用时: 2ms, 内存消耗: 380KB, 提交时间: 2020-10-31

/*
struct TreeNode {
    int val;
    struct TreeNode *left;
    struct TreeNode *right;
    TreeNode(int x) :
            val(x), left(NULL), right(NULL) {
    }
};*/

class IdenticalTree {
public:
    bool isSame(TreeNode* T1, TreeNode* T2){
        if(T1==NULL && T2==NULL)
            return true;
        if(T1==NULL || T2==NULL)
            return false;
        return (T1->val==T2->val) && isSame(T1->left, T2->left) && isSame(T1->right, T2->right);
    }
    bool chkIdentical(TreeNode* A, TreeNode* B) {
        if(A==NULL && B!=NULL)
            return false;
        if(isSame(A, B))
            return true;
        return chkIdentical(A->left, B)||chkIdentical(A->right, B);
    }
};

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

/*
struct TreeNode {
    int val;
    struct TreeNode *left;
    struct TreeNode *right;
    TreeNode(int x) :
            val(x), left(NULL), right(NULL) {
    }
};*/

class IdenticalTree {
public:
    bool chkIdentical(TreeNode* A, TreeNode* B) {
        // write code here
        if (A==NULL && B!=NULL)
            return false;
        if ( isEqual(A, B))
            return true;
        if (chkIdentical(A->left, B) )
            return true;
        else if (chkIdentical(A->right, B))
            return true;
        else
            return false;
    }
    
    bool isEqual(TreeNode *A, TreeNode *B)
    {
        if ( A==NULL && B==NULL)
            return true;
        if ( A==NULL || B==NULL)
            return false;
        if ( A->val != B->val)
            return false;
        return isEqual(A->left, B->left) && isEqual(A->right,B->right);
    }
};

上一题