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

news2024/11/28 12:39:17

目录

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

上面的输出结果(按照 根、左、右的顺序进行)就是上面的这个平衡二叉树,

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/628640.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ffmpeg中的avs解码器综述

最近拿了一个avs的视频流&#xff0c;用硬件可以解码&#xff0c;但是ffmpeg自带的却无法解码。 所以研究了一下&#xff0c;首先看ffmpeg的avs解码器&#xff1a; 可以看到avs有两个&#xff0c;第一个是avs 第二个是cavs. 我们先用avs来解码&#xff0c;解码的视频是通过【a…

浅谈医院能耗监控平台研究与应用

摘要&#xff1a;综合性医院作为大型公共机构&#xff0c;能耗高的问题日益突出&#xff0c;构建能耗监控平台对医院能耗量化管理以及效果评估已经成为迫切需要。建立智能能耗监控平台&#xff0c;对采集的能耗数据进行分析&#xff0c;实现对医院能耗平台监控&#xff0c;为医…

java并发编程:Fork/Join并发框架介绍

文章目录 Fork/Join简介工作窃取算法Fork/Join的具体实现ForkJoinTaskfork()方法join()方法 ForkJoinPoolWorkQueuerunState Fork/Join的异常处理Fork/Join的使用 Fork/Join简介 Fork/Join框架是一个实现了ExecutorService接口的多线程处理器&#xff0c;它专为那些可以通过递…

java的内部类

1.内部类的概念 内部类表示的事物是外部类的一部分&#xff0c;内部类单独出现没有任何意义。如发动机是汽车的一部分。 内部类的访问特点&#xff1a; &#xff08;1&#xff09;内部类可以直接访问外部类的成员&#xff0c;包括私有&#xff1b; &#xff08;2&#xff09;外…

11.无监督学习之主成分分析

11.1 降维 降维的两种应用&#xff1a;一是数据压缩&#xff1b;二是可视化数据。 11.1.1 数据压缩 将相关性强的两个特征导致冗余&#xff0c;可以直接去掉其中一个特征&#xff0c;或者将两个特征进行某种转换&#xff0c;得到一个特征。 11.1.2 可视化数据 直接看数据可…

设计模式:提升软件设计质量的利器,适合入门者的指南

目录 导言&#xff1a;设计模式的概念常见的设计模式2.1. 单例模式&#xff08;Singleton Pattern&#xff09;2.2. 工厂模式&#xff08;Factory Pattern&#xff09;2.3. 观察者模式&#xff08;Observer Pattern&#xff09;2.4. 策略模式&#xff08;Strategy Pattern&…

OpenGL 摄像机

1.简介 OpenGL本身没有摄像机(Camera)的概念&#xff0c;但我们可以通过把场景中的所有物体往相反方向移动的方式来模拟出摄像机&#xff0c;产生一种我们在移动的感觉&#xff0c;而不是场景在移动。 要定义一个摄像机&#xff0c;我们需要它在世界空间中的位置、观察的方向…

Java 实现在顺序表中获取 pos 元素的位置

一、思路 1.顺序表不能是空的 2.pos位置要合法 3.直接返回当前的pos位置的下标 二、图解 返回的要是当前 pos 位置的下标&#xff0c;因为下标是没有负数的&#xff0c;由此就可以得出如果下标是负数的话&#xff0c; 这就是一种不合法的情况。 pos 位置的下标也不会超过顺序…

星空特效,截图不太完美

先上效果&#xff1a; 再上代码&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>星空</title><meta name"viewport" content"widthdevice-width, user-scalable…

【立体视觉(三)】之张正友标定法原理

【立体视觉&#xff08;三&#xff09;】之张正友标定法原理 一、相机标定二、参数求解一&#xff09;闭合解二&#xff09;极大似然解三&#xff09;考虑相机畸变 三、实验流程 此为个人学习笔记&#xff0c;在各处借鉴了不少好图好文&#xff08;参考文献在文末&#xff09;&…

项目中常用的linux命令总结大全

哈喽 大家好啊&#xff0c;相信大家在项目中都会常常部署服务器&#xff0c;就涉及到一些常见的linux命令了 1.命令提示符表示命令输入 ps aux | grep nginx&#xff08;查看nginx进程运行状态&#xff09;whereis nginx 查找哪里有nginxlsof -i:5300 查看端口状态kill -9 xxx进…

攻防世界-Crypto-转轮机加密

1. 题目如下&#xff1a; 1: < ZWAXJGDLUBVIQHKYPNTCRMOSFE < 2: < KPBELNACZDTRXMJQOYHGVSFUWI < 3: < BDMAIZVRNSJUWFHTEQGYXPLOCK < 4: < RPLNDVHGFCUKTEBSXQYIZMJWAO < 5: < IHFRLABEUOTSGJVDKCPMNZQWXY < 6: < AMKGHIWPNYCJBFZDR…

大数据需要学习哪些内容?

大数据技术的体系庞大且复杂&#xff0c;每年都会涌现出大量新的技术&#xff0c;目前大数据行业所涉及到的核心技术主要就是&#xff1a;数据采集、数据存储、数据清洗、数据查询分析和数据可视化。 Python 已成利器 在大数据领域中大放异彩 Python&#xff0c;成为职场人追求…

论文阅读和分析:Binary CorNET Accelerator for HR Estimation From Wrist-PPG

主要贡献&#xff1a; 一种完全二值化网络(bCorNET)拓扑结构及其相应的算法-架构映射和高效实现。对CorNET进行量化后&#xff0c;减少计算量&#xff0c;又能实现减轻运动伪影的效果。 该框架在22个IEEE SPC受试者上的MAE为6.675.49 bpm。该设计采用ST65 nm技术框架&#xff…

04_两种常见的网页反爬措施及应对方法

一、封禁IP地址反爬 1、应对思路: 理解这种反爬方法的含义:当我们用自己电脑的ip地址短时间,高频率访问某个具有此类反爬设置的网站,这种网站就会把我们的ip地址封禁,一般都是封24小时或者其他时间。解决方案:通过代理ip访问,这种方式只不过就是让你有了重新访问网页的…

宝塔面板搭建thinkphp后请求中去除index.php后缀

宝塔面板搭建thinkphp后请求中去除index.php后缀 nginx配置 在宝塔面板网站中绑定thinkphp的public&#xff0c;添加站点 点击站点设置按钮打开项目设置页面 找到配置文件 选项&#xff0c;然后在 22行 后添加一下代码 location / {if (!-f $request_filename) {rewrite …

一学就会----链表的中间节点

文章目录 题目描述思路代码示例在原题上增加难度思路代码示例 题目描述 给定一个头结点为 head 的非空单链表&#xff0c;返回链表的中间结点。 如果有两个中间结点&#xff0c;则返回第二个中间结点。 图片示例&#xff1a; 思路 因为这道题目并没有时间复杂度的规定&#xf…

iOS17beta有哪些Bug?iOS17值得升级吗?iOS17Bug大汇总!

iOS17Beta已上线几天&#xff0c;带来了新增横屏待机、“嘿Siri”去除了“嘿”、联系人海报、NameDrop等新功能。 做为第一个beta版本&#xff0c;避免不了许多Bug的出现。 小编收集了目前体验遇到和网上反馈的所有BUG&#xff0c;还没更新iOS17的小伙伴们可以看看截止目前升级…

C++ 类型转换:类型萃取器进行类型转换和cast类操作符进行转换的区别?

区别 类型萃取器和cast类操作符都可以用于类型转换&#xff0c;但它们的用途和工作方式有所不同。 类型萃取器&#xff0c;如 std::remove_reference<T>、std::remove_const<T>、std::add_pointer<T> 等&#xff0c;主要用于在编译时修改类型&#xff0c;它…

# WGCNA | 不止一个组的WGCNA怎么分析嘞!?~(四)(共识网络分析-第四步-共识模块与性状相关联)

1写在前面 最近稍微没有那么忙了&#xff0c;好好搞一下公众号吧&#xff0c;好久没怎么认真做了。&#x1f637; 有的时候你会发现坏事不一定是坏事&#xff0c;塞翁失马&#xff0c;焉知非福啊&#xff01;~&#x1f643; "我只担心一件事,我怕我配不上自己所受的苦难。…