zoukankan      html  css  js  c++  java
  • 剑指offer-18.树的子结构

    0 题目

    输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)

    1 分析

    首先,遍历A的节点,找到与B的根节点值相同的节点。然后取判断以这两个节点开头的树,是否相等。

    判断两个子树相等的条件也是一个递归。

    知道t1为空的时候,就算是判断完了,此时返回true

    bool HasSubtree(TreeNode *t1, TreeNode *t2)
    {
        bool ret = false;
        if (t1 != nullptr && t2 != nullptr)
        {
            // 如果值相同就去判断是否是子树
            if (t1->val == t2->val)
            {
                ret = aux(t1, t2);
            }
    
            // 下面两个 只有在ret ==false 的时候才再去遍历
            // 因为ret ==true 的时候是已经找到了子树,因此就需要在去便利了
            if (ret == false)
            {// 左右依次遍历,都是在 ret==false的时候
                ret = HasSubtree(t1->left, t2);
            }
            if (ret == false)
            {
                ret = HasSubtree(t1->right, t2);
            }
        }
        return ret;
    }
    
    bool aux(TreeNode *t1, TreeNode *t2)
    {
        // t2为nullptr的时候,表示t2完全在t1内
        if (t2 == nullptr)
        {
            return true;
        }
        if (t1 == nullptr)
        {
            return false;
        }
        if (t1->val != t2->val)
        {
            return false;
        }
        return aux(t1->right, t2->right) && aux(t1->left, t2->left);
    }
    

      

  • 相关阅读:
    webpack打包(2)
    webpack打包(1)
    angular(5自定义模块和ionic创建)
    angular(4)路由及其使用
    anjular(3 生命函数及请求)
    Angular(2)
    自学Angular(1)
    Typescript知识总结
    PLC数据采集与MES系统对接
    python格式化日期时间自动补0
  • 原文地址:https://www.cnblogs.com/perfy576/p/8607267.html
Copyright © 2011-2022 走看看