zoukankan      html  css  js  c++  java
  • 判断二叉树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;
    }
    

      

      

  • 相关阅读:
    [APIO2007]风铃
    [APIO2011]方格染色
    [APIO2016]烟火表演
    [APIO2013]机器人
    [APIO2015]巴厘岛的雕塑
    [APIO2015]八邻旁之桥
    [APIO2010]特别行动队
    [APIO2015]雅加达的摩天楼
    WC2019游记
    退役前的做题记录3.0
  • 原文地址:https://www.cnblogs.com/veis/p/12623800.html
Copyright © 2011-2022 走看看