题解 | #树的子结构#

树的子结构

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;
	}
};

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务