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);
       }
        
    };
  • 相关阅读:
    CSS font-family 字体名称一览表
    jQuery动态追加移除CSS样式
    Java中super关键字的作用与用法
    I Have a Dream(我有一个梦想)
    再读《诫子书》
    世间谤我、欺我、辱我、笑我,为之奈何?
    英语句型:我除了音乐一无所能
    H5 iphoneX适配方案
    对象序列化成字符串,拼接在请求url后面
    React 60s倒计时
  • 原文地址:https://www.cnblogs.com/cgy1012/p/11385976.html
Copyright © 2011-2022 走看看