zoukankan      html  css  js  c++  java
  • 树的子结构

    1. 要有解决问题的步骤,层次感  (二叉树指针多,要判断指针是否为空)

    1)先遍历二叉树,判断根节点是否一样;(没说明的情况能用递归就用递归)

     2)如果根节点一样,那么进一步向下判断下面所有的子树一样;

    /*
    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)
        {
           bool result=false;
            
            if(pRoot1!=nullptr&&pRoot2!=nullptr)
            {
               if(pRoot1->val==pRoot2->val)  //类型要是double 可不能用== 得自己写个equal 函数     
                result =DoesTree1hasTree2( pRoot1, pRoot2); // result含义不同
               
                if(!result)//必须加上这句 如果结果没对  //因为上层即使根结点一样  也不一定完全匹配!!!! //和回溯有点像!!
                   result=HasSubtree( pRoot1->left,  pRoot2);
                if(!result) 
                   result=HasSubtree( pRoot1->right, pRoot2);
            
    
            }
            return result;//要是空指针也返回 false;
    
        }
    public:
        //整个匹配;匹配上其实就是 直到把2节点遍历成空为止
       bool DoesTree1hasTree2(TreeNode* pRoot1, TreeNode* pRoot2) 
       {
         if(pRoot2==nullptr)     //把树2熬到头就赢了   //一开始不会是空树  因为上层调用已经限制过了!!
          return  true;
         if(pRoot1==nullptr)    //完了 树1先熬到头了   //把树1都遍历空了都没找到
          return  false;
         
         if(pRoot1->val!=pRoot2->val) //做判别
          return false ;
           //其他情况
           return DoesTree1hasTree2(pRoot1->left, pRoot2->left)&&DoesTree1hasTree2(pRoot1->right, pRoot2->right);
       }
        
    };
  • 相关阅读:
    c#dalegate invoke及AsyncCallback使用
    wpf ProgressBar使用
    gridcontrol如何根据值来动态设置某一行的颜色
    JS判断客户端是否是iOS或者Android
    React Native视频播放(iOS)
    js中Math()函数&&数据类型转换
    在Mac OS X上安装Ionic
    Umbraco列表分页
    angularJs中图表功能(有集成框架)-angular-flot
    React Native开发环境搭建
  • 原文地址:https://www.cnblogs.com/cgy1012/p/11385976.html
Copyright © 2011-2022 走看看