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

      

      

  • 相关阅读:
    Nginx降权启动
    Tomcat降权启动
    【转载】XSS学习笔记
    仪仗队(容斥,欧拉,打表)
    2012蓝桥杯
    HPU周赛题目解析
    蓝桥杯真题集2011
    cf公式专场-续
    24点游戏&&速算24点(dfs)
    Parallelogram Counting(平行四边形个数,思维转化)
  • 原文地址:https://www.cnblogs.com/veis/p/12623800.html
Copyright © 2011-2022 走看看