二叉树的子树和子结构

子树的意思是包含了一个结点,就得包含这个结点下的所有节点,一棵大小为n的二叉树有n个子树,就是分别以每个结点为根的子树。子结构的意思是包含了一个结点,可以只取左子树或者右子树,或者都不取。
直接上代码。这解释起来也蛋疼。


一.一个二叉树树是另一二叉树的子结构。


class Solution:
	public:
	bool isSubtree(TreeNode* pRoot1,TreeNode* pRoot2)
	{
	   if(!pRoot2)return true;//相等于pRoot2结点比对完成
	   if(!pRoot1)return false;//pRoot1比对结束
	   if(pRoot2->val==pRoot2->val)
	   {
	   return isSubtree(pRoot1->left,pRoot2->left)&&isSubtree(pRoot1->right,pRoot2->right);
	   }else
	   {
	   return false;
	   }
	}
	bool HasSubtree(TreeNode* pRoot1,TreeNode* pRoot2)
	{
	    if(!pRoot1)return false;
	    if(!pRoot2)return false;
	   return isSubtree(pRoot1,pRoot2)||HasSubtree(pRoot1->left,pRoot2)||HasSubtree(pRoot1->right,pRoot2);
	}
	}
	

二.一个二叉树是另一个二叉树的子树,代码需要轻微的改动

class Solution:
	public:
	bool isSubtree(TreeNode* pRoot1,TreeNode* pRoot2)
	{
	   if(!pRoot1&&!pRoot2)return true;
	   else return false;
	   if(pRoot2->val==pRoot2->val)
	   {
	   return isSubtree(pRoot1->left,pRoot2->left)&&isSubtree(pRoot1->right,pRoot2->right);
	   }else
	   {
	   return false;
	   }
	}
	bool HasSubtree(TreeNode* pRoot1,TreeNode* pRoot2)
	{
	    if(!pRoot1)return false;
	    if(!pRoot2)return false;
	   return isSubtree(pRoot1,pRoot2)||HasSubtree(pRoot1->left,pRoot2)||HasSubtree(pRoot1->right,pRoot2);
	}

原文地址:https://www.cnblogs.com/YenKoc/p/12779964.html