递归——先递后归——平衡二叉树

目录

1.什么是递归

(1)问问无所不能的chatgpt。

​(2)我的理解

2.递归的应用之——树

(1)二叉树的录入与打印

(2)举个例子:将有序的数组转化为平衡二叉树


1.什么是递归

(1)问问无所不能的chatgpt。

chatgpt的回答:

递归——先递后归——平衡二叉树_第1张图片
(2)我的理解

先递后归:

先举个例子,

def fun1(x):
    if x<0:
        return
    print("递",x)
    fun1(x-1)
    print("归",x)
    # print(x)
fun1(3)

 输出结果: 

递归——先递后归——平衡二叉树_第2张图片

插入图来理解

递归——先递后归——平衡二叉树_第3张图片

一个圈子就相当于一次完整的递归(有递也有归)

2.递归的应用之——树

(1)二叉树的录入与打印


class TreeNode:
    def __init__(self, val):
        self.val = val
        self.left = None
        self.right = None

def build_tree():
    val = input("请输入节点值:")
    if val == "*":
        return None
    node = TreeNode(int(val))
    node.left = build_tree()
    node.right = build_tree()
    return node

def print_tree(root, level=0):
    if root is None:
        return
    print_tree(root.right, level + 1)
    print(" " * 4 * level + "->", root.val)
    print_tree(root.left, level + 1)

if __name__ == "__main__":
    root = build_tree()
    print_tree(root)

(2)举个例子:将有序的数组转化为平衡二叉树


class TreeNode:
    def __init__(self,val=0,left=None,right=None):
        self.val = val
        self.left = left
        self.right = right

#开始递归将有序的递增数组转化为二叉搜索树
def Trans_BinTree(nums):
    if not nums:
        return None
    mid = len(nums)//2
    root = TreeNode(nums[mid])
    root.left = Trans_BinTree(nums[:mid])
    root.right = Trans_BinTree(nums[mid+1:])
    return root

#打印这个树
def print_tree(root):
    if not root:
        return
    print(root.val)
    print_tree(root.left)
    print_tree(root.right)

nums = [-10,-3,0,5,9]
print(nums)

输出结果:

 0
-3
-10
9
5

递归——先递后归——平衡二叉树_第4张图片

上面的输出结果(按照 根、左、右的顺序进行)就是上面的这个平衡二叉树,递归——先递后归——平衡二叉树_第5张图片

你可能感兴趣的:(蓝桥杯刷题,python,开发语言)