zoukankan      html  css  js  c++  java
  • 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
    
    
  • 相关阅读:
    django 之 用户忘记密码的解决办法
    Django 富文本ckeditor 在模板中的实现
    MySQL密码的恢复方法
    sublime 快捷键
    linux 修改用户密码
    ubuntu 下重启 mysql
    python 控制浏览器模块
    读书笔记:从小工到专家(一)
    urlparse 模块
    python 标准内建函数
  • 原文地址:https://www.cnblogs.com/shiqi17/p/9483753.html
Copyright © 2011-2022 走看看