• python实现满二叉树递归循环


    二叉树及题目介绍

    例题:
    有一颗满二叉树,每个节点是一个开关,初始全是关闭的,小球从顶点落下,
    小球每次经过开关就会把它的状态置反,这个开关为关时,小球左跑,为开时右跑。现在问第k个球下落到d层时的开关编号。输入深度d和小球个数k

    思路分析:首先该题最先想到的是模拟,开一个数组表示开关,下标表示编号,根据k的子树为2k和2k+1来改变数组,判断进行。但是这样太麻烦了。而且根据深度和小球个数,导致计算量太大。
    寻找规律:

    可以知道每一层,第奇数个落入该层的球都是往左,第偶数个落入该层的球都是往右。
    小球按照编号依次下落的,对于左枝(也就是奇数球),每个I号小球落入该层都是第(k+1)/2个小球。而偶数是往右走的k/2个小球
    所以采取每一次一个循环,来判断k%2小球往哪儿走,循环d层,即可找出最后叶子!省去大数组和大时间

    pytho实现
    def bin_tree(x,floor):
        num = x
        location = 1  #设定初始位置第一层第一个
        for f in range(1, floor):
            if num%2: #只要是奇数就往左边走
                num = (num + 1)/2 #每个位置会经过的小球重新编号
                location = 2*location  #左边的就是location的2倍
            else:
                num = num/2
                location = 2*location + 1  #右边为location 2倍➕1
            print(location)
    
    bin_tree(5, 6)
    
    #结果为
    
    2
    4
    9
    18
    36
    
    
  • 相关阅读:
    移动端布局方案汇总&&原理解析
    Javascript运行机制
    git 使用
    async await详解
    vue使用axios调用豆瓣API跨域问题
    hash和history的区别
    http状态码
    XSS 和 CSRF简述及预防措施
    【pytorch】pytorch基础学习
    [源码解读] ResNet源码解读(pytorch)
  • 原文地址:https://www.cnblogs.com/shiqi17/p/9483753.html
Copyright © 2020-2023  润新知