题解 | #树的子结构#

树的子结构

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;
		bool res = false;
		if (pRoot1->val == pRoot2->val) {
			res = isPart(pRoot1, pRoot2);
		}
		// 如果找不到,就找左子树
		if (!res) {
			res = HasSubtree(pRoot1->left, pRoot2);
		}
		// 左子树找不到,就找右子树
		if (!res) {
			res = HasSubtree(pRoot1->right, pRoot2);
		}
		return res;
    }
	
	bool isPart(TreeNode* t1, TreeNode* t2) {
		// 节点值相同才会进入isPart函数,终止条件就是到 t1 或 t2 的叶子节点
		if (t2 == nullptr) return true;
		// 如果 t2 还没有遍历完,t1 却遍历完了。返回false
		if (t1 == nullptr) return false;
		if (t1->val != t2->val) return false;
		return isPart(t1->left, t2->left) && isPart(t1->right, t2->right);
	}


};

2023-剑指-二叉树 文章被收录于专栏

2023-剑指-二叉树

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务