题解 | #树的子结构#
树的子结构
https://www.nowcoder.com/practice/6e196c44c7004d15b1610b9afca8bd88
/* struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) { } };*/ class Solution { public: bool HasSubtree(TreeNode* pRoot1, TreeNode* pRoot2) { if (pRoot1 == nullptr ||pRoot2 == nullptr ) return false; else return vis_tree(pRoot1,pRoot2); } bool vis_tree( TreeNode* pRoot_1,TreeNode * pRoot_2 ){ if( pRoot_1->val == pRoot_2->val ){ if(is_same_tree(pRoot_1,pRoot_2)) return true; } if(pRoot_1->left != nullptr && vis_tree( pRoot_1->left,pRoot_2 )) return true; else if( pRoot_1->right != nullptr && vis_tree( pRoot_1->right,pRoot_2 ) ) return true; return false; } bool is_same_tree( TreeNode * pRoot_1_,TreeNode * pRoot_2_ ){ if( pRoot_2_->left != nullptr ){ if( pRoot_1_->left == nullptr ) return false; else if( pRoot_1_->left->val != pRoot_2_->left->val ) return false; else if(!is_same_tree(pRoot_1_->left,pRoot_2_->left) ) return false; } if( pRoot_2_->right != nullptr ){ if( pRoot_1_->right == nullptr ) return false; else if( pRoot_1_->right->val != pRoot_2_->right->val ) return false; else if(!is_same_tree(pRoot_1_->right,pRoot_2_->right) ) return false; } return true; } };