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

      

  • 相关阅读:
    染色法判定二分图
    Kruskal算法求最小生成树
    Prim算法求最小生成树
    Floyd算法求多源最短路
    spfa判断负环
    java 线程的使用
    java IO基础
    数据库 EXISTS与NOT EXISTS
    数据库 何为相关查询和不相关查询?
    数据库的基础知识
  • 原文地址:https://www.cnblogs.com/perfy576/p/8607267.html
Copyright © 2011-2022 走看看