判断二叉树A是否包含二叉树B

Posted veis

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了判断二叉树A是否包含二叉树B相关的知识,希望对你有一定的参考价值。

1、要求:
输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)
 
2、思路:
(1)首先确定传入的是否是空树;
(2)先判断A的根与B子树是否相等;如果不相等,则比较A的左子树是否和B子树相等;再不相等则判断A的右子树是否和B子树相等;
备注:
  A树在判断函数中为空有两种情况:
  a.如果A树为空且B树不为空说明不匹配,
  b.如果A为空,B为空,则说明匹配。
 
2、代码实现:
 
struct TreeNode {
	int val;
	struct TreeNode *left;
	struct TreeNode *right;
	TreeNode(int x) :
		val(x), left(NULL), right(NULL) {
	}
};

bool isSubtree(TreeNode* pRoot1, TreeNode* pRoot2)
{
	if (pRoot1 == NULL && pRoot2 != NULL)
		return false;
	if (pRoot2 == NULL)
		return true;
	if (pRoot1->val != pRoot2->val)
		return false;
	return isSubtree(pRoot1->left, pRoot2->left) && isSubtree(pRoot1->right, pRoot2->right);
}
bool HasSubtree(TreeNode* pRoot1, TreeNode* pRoot2)
{
	bool result = false;
	if (pRoot1 != NULL && pRoot2 != NULL)
	{
		if (pRoot1->val == pRoot2->val) {
			result = isSubtree(pRoot1, pRoot2);
		}
		if (!result)
			result = HasSubtree(pRoot1->left, pRoot2);
		if (!result)
			result = HasSubtree(pRoot1->right, pRoot2);
	}
	return result;
}

  

  

以上是关于判断二叉树A是否包含二叉树B的主要内容,如果未能解决你的问题,请参考以下文章

判断一颗二叉树是否为二叉平衡树 python 代码

判断二叉树B是否是二叉树A的一部分

判断二叉树B是否是树A的子树

算法题:二叉树A是否包含二叉树B的拓扑结构

怎么判断是不是是完全二叉树 用C++或C语言

Offer[26] 树的子结构