目录
1.什么是递归
(1)问问无所不能的chatgpt。
(2)我的理解
2.递归的应用之——树
(1)二叉树的录入与打印
(2)举个例子:将有序的数组转化为平衡二叉树
1.什么是递归
(1)问问无所不能的chatgpt。
chatgpt的回答:
(2)我的理解
先递后归:
先举个例子,
def fun1(x):
if x<0:
return
print("递",x)
fun1(x-1)
print("归",x)
# print(x)
fun1(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
上面的输出结果(按照 根、左、右的顺序进行)就是上面的这个平衡二叉树,