zoukankan      html  css  js  c++  java
  • 剑指OFFER(百度笔试)——二叉树的子结构

    百度软件开发实习生笔试:

    1.模拟短作业优先调度算法,计算平均等待时间,例如输入[0,2,4,8]表示四个作业分别是第0s到、第2s到、第4s到、第8s到。[2,1,6,3]表示四个作业的运行时间。

    计算平均等待时间。每个作业的等待时间:实际开始时间-到达时间。(不可剥夺)

    2.二叉树的子结构,输入两棵树A、B,判断B是不是A的子树。

    3.第三道题记不得了。貌似也是操作系统的。

    --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

     二叉树的子结构:

    最近可以总结一下关于树的算法题了。

    子树问题就是,判断一棵树是不是另一棵树的子树。经常出现各大公司的笔试题中。

    其实,树(二叉树)的很多问题都可以用递归解决。因为结构是一样的嘛。

    struct TreeNode
    {
        int val;
        TreeNode *next;
        TreeNode(int v) : val(v), next(NULL) {}
    };

    定义了一个isSame的函数,判断两棵树是不是一模一样的二叉树。其实如果要一棵树T2是另一棵树T1的子结构,一定是有一部分他们是一模一样的,可能T1没到叶节点,但是T2必须要判断到叶节点。

    因此isSame的出口条件是T2==NULL&&T1!=NULL(是子树),T2!=NULL&&T1==NULL(不是子树)。

        bool isPart(TreeNode* pRoot1, TreeNode* pRoot2) {
            if (pRoot2 == NULL)
                return true;
            if (pRoot1 == NULL)
                return false;
            if (pRoot1->val == pRoot2->val)
                return isPart(pRoot1->left, pRoot2->left) && isPart(pRoot1->right, pRoot2->right);
            else return false;
        }

    只是从哪里开始一模一样,需要判断的。

    bool HasSubtree(TreeNode* pRoot1, TreeNode* pRoot2)
        {
    
            if (pRoot2 == NULL || pRoot1 == NULL)
                return false;
            bool result = false;
            if (pRoot1->val == pRoot2->val)
                result = isPart(pRoot1, pRoot2);
            if (result == false)
                return HasSubtree(pRoot1->left, pRoot2) || HasSubtree(pRoot1->right, pRoot2);
            else return result;
    
        }
  • 相关阅读:
    【转】C#中判断扫描枪输入与键盘输入
    根据名称分组,选择最大日期和最小日期的数据,并显示在一行上
    C#如何判断我的程序已经有一个实例正在运行
    消息队列篇
    Redis面试笔记(二)雪崩、穿透、击穿三连问
    MySQL基础
    Redis面试笔记(一)
    Java多线程(二)
    Java多线程(一)
    Elastic Search之布尔查询
  • 原文地址:https://www.cnblogs.com/LUO77/p/5440230.html
Copyright © 2011-2022 走看看