python实现满二叉树递归循环

Posted c_G-17

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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

以上是关于python实现满二叉树递归循环的主要内容,如果未能解决你的问题,请参考以下文章

数据结构——二叉树 前序中序后序层次遍历及非递归实现 查找统计个数比较求深度的递归实现(转)

二叉树入门知识——一篇了解二叉树

关于二叉树,高分!

2021-04-14:判断二叉树是否是满二叉树?

总结所有有关二叉树公共祖先问题

二叉树的详细实现(含递归展开图)