给定彼此独立的两棵二叉树,树上的节点值两两不同,判断 t1 树是否有与 t2 树完全相同的子树。
子树指一棵树的某个节点的全部后继节点
数据范围:树的节点数满足
,树上每个节点的值一定在32位整型范围内
进阶:空间复杂度:
,时间复杂度
/** * struct TreeNode { * int val; * struct TreeNode *left; * struct TreeNode *right; * }; */ /** * * @param root1 TreeNode类 * @param root2 TreeNode类 * @return bool布尔型 */ //先找到root2的根在root1中的位置 提取root1中以root2的根为根的子树 //再判断两个子数是否完全相同 bool preorder(struct TreeNode* root1, struct TreeNode* root2) { //static int count = 0; if (NULL != root1 && NULL != root2) { if (root1->val != root2->val) return false; return preorder(root1->left, root2->left) && preorder(root1->right, root2->right) ; // preorder(root1->left, root2->left); // preorder(root1->right, root2->right); } if (NULL != root1 && NULL == root2) return false; if (NULL == root1 && NULL != root2) return false; return true; } struct TreeNode* post(struct TreeNode* root,int value) { //二叉树查找某个点 if(NULL==root) return NULL; struct TreeNode* temp=NULL; if(root->left!=NULL){ temp=post(root->left,value); if(temp!=NULL) return temp; } if(root->right!=NULL){ temp=post(root->right,value); if(temp!=NULL) return temp; } if(root->val==value) return root; // post(root->left,value); // post(root->right,value); //arr[count++] = root->val; return temp; } bool isContains(struct TreeNode* root1, struct TreeNode* root2 ) { // write code here struct TreeNode* temp=post(root1,root2->val); if(temp==NULL){ return false; } return preorder(temp,root2); }