博客
关于我
Codeup——611 | 问题 B: 二叉树
阅读量:162 次
发布时间:2019-02-26

本文共 1318 字,大约阅读时间需要 4 分钟。

为了解决这个问题,我们需要计算结点m所在的子树中包括多少个结点。已知二叉树的构造规则是每个结点的左子树是其两倍,右子树是其两倍加一。

方法思路

我们可以使用一种高效的方法来解决这个问题。具体步骤如下:

  • 问题分析:我们需要找到结点m的子树中的所有结点数目,直到结点不超过n。每个结点k的左子树是2k,右子树是2k+1。

  • 队列处理:我们可以使用队列来处理每个结点的左子树和右子树节点,直到队列为空或者所有节点超过n。

  • 计数节点:每次从队列中取出一个节点,如果它不超过n,计数加一,并将其左子树和右子树节点加入队列(如果它们不超过n)。

  • 这种方法的时间复杂度是O(log n),因为每次处理一个节点时,节点值至少翻倍,因此在最坏情况下也只需要log n次迭代。

    解决代码

    import sysfrom collections import dequedef main():    for line in sys.stdin:        line = line.strip()        if not line:            continue        parts = line.split()        if len(parts) == 2:            m, n = map(int, parts)            if m == 0 and n == 0:                break            if n < m:                print(0)                continue            count = 0            q = deque()            q.append(m)            while q:                current = q.popleft()                if current > n:                    continue                count += 1                left = current * 2                right = current * 2 + 1                if left <= n:                    q.append(left)                if right <= n:                    q.append(right)            print(count)if __name__ == "__main__":    main()

    代码解释

  • 读取输入:从标准输入读取数据,处理每行的m和n,直到遇到0 0。

  • 初始化队列:将起始结点m加入队列。

  • 处理队列:循环处理队列中的每个节点。如果节点值超过n,跳过。否则,计数加一,并将其左子树和右子树节点加入队列(如果不超过n)。

  • 这种方法确保了在处理大数时的效率,并且能够正确计算结点m所在子树中的结点数目。

    转载地址:http://npr.baihongyu.com/

    你可能感兴趣的文章
    parallels desktop for mac安装虚拟机 之parallelsdesktop密钥 以及 parallels desktop安装win10的办公推荐可以提高办公效率...
    查看>>
    parallelStream导致LinkedList遍历时空指针的问题
    查看>>
    Parameter ‘password‘ not found. Available parameters are [md5String, param1, username, param2]
    查看>>
    ParameterizedThreadStart task
    查看>>
    Paramiko exec_命令的实时输出
    查看>>
    Spring security之管理session
    查看>>
    paramiko模块
    查看>>
    param[:]=param-lr*param.grad/batch_size的理解
    查看>>
    spring mvc excludePathPatterns失效 如何解决spring拦截器失效 excludePathPatterns忽略失效 拦截器失效 spring免验证拦截器不起作用
    查看>>
    Spring Cloud 之注册中心 EurekaServerAutoConfiguration源码分析
    查看>>
    Parrot OS 6.2 重磅发布!推出全新 Docker 容器启动器
    查看>>
    Parrot OS 6.3 发布!全面提升安全性,新增先进工具,带来更高性能
    查看>>
    ParseChat应用源码ios版
    查看>>
    Part 2异常和错误
    查看>>
    Pascal Script
    查看>>
    Spring Boot集成Redis实现keyspace监听 | Spring Cloud 34
    查看>>
    Spring Boot中的自定义事件详解与实战
    查看>>
    Passport 密码模式
    查看>>
    Spring Boot(七十六):集成Redisson实现布隆过滤器(Bloom Filter)
    查看>>
    passport 简易搭配
    查看>>