OR55. 拓扑结构相同子树
描述
对于两棵彼此独立的二叉树A和B,请编写一个高效算法,检查A中是否存在一棵子树与B树的拓扑结构完全相同。
给定两棵二叉树的头结点A和B,请返回一个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); } };