算法--解决二叉树遍历问题

第一 实现树的结构

class Node():
    # 构造函数,初始化节点对象,包含数据和左右子节点
    def __init__(self, data=None):
        self.data = data  # 节点存储的数据
        self.left = None  # 左子节点,默认为None
        self.right = None  # 右子节点,默认为None

    # 设置节点数据的方法
    def set_data(self, data):
        self.data = data  # 将传入的数据赋值给节点的data属性

    # 获取节点数据的方法
    def get_data(self):
        return self.data  # 返回节点的data属性

    # 设置左子节点的方法
    def set_left(self, node):
        self.left = node  # 将传入的节点赋值给当前节点的left属性

    # 获取左子节点的方法
    def get_left(self):
        return self.left  # 返回当前节点的left属性,即左子节点

    # 设置右子节点的方法
    def set_right(self, node):
        self.right = node  # 将传入的节点赋值给当前节点的right属性

    # 获取右子节点的方法
    def get_right(self):
        return self.right  # 返回当前节点的right属性,即右子节点

if __name__ == '__main__':
    # 创建根节点,数据为'a'
    root_node = Node('a')
    # 创建左子节点,数据为'b'
    left_node = Node('b')
    # 创建右子节点,数据为'c'
    right_node = Node('c')
    # 将左子节点设置到根节点的左子节点位置
    root_node.set_left(left_node)
    # 将右子节点设置到根节点的右子节点位置
    root_node.set_right(right_node)
    # 打印根节点的数据,左子节点的数据和右子节点的数据
    print(root_node.get_data(), root_node.get_left().data, root_node.get_right().data)

第二  二叉树递归遍历

#实现树的递归遍历(前、中、后以及层次的遍历),首先定义实现树结构的类Node。编写三个函数proorderO)、posorder0)和mid order0)分别实现先序遍历后序遍历和中序遍历。

from collections import deque

class Node():
    # 构造函数,初始化节点对象,包含数据和左右子节点
    def __init__(self, data=None, left=None, right=None):
        self.data = data  # 节点存储的数据
        self.left = left  # 左子节点,默认为None
        self.right = right  # 右子节点,默认为None

    # 前序遍历:先访问根节点,然后递归遍历左子树,最后递归遍历右子树
    def pro_order(self):
        print(self.data)  # 访问根节点
        if self.left:  # 如果存在左子节点,则递归遍历左子树
            self.left.pro_order()
        if self.right:  # 如果存在右子节点,则递归遍历右子树
            self.right.pro_order()

    # 中序遍历:先递归遍历左子树,然后访问根节点,最后递归遍历右子树
    def mid_order(self):
        if self.left:  # 如果存在左子节点,则递归遍历左子树
            self.left.mid_order()
        print(self.data)  # 访问根节点
        if self.right:  # 如果存在右子节点,则递归遍历右子树
            self.right.mid_order()

    # 后序遍历:先递归遍历左子树,然后递归遍历右子树,最后访问根节点
    def pos_order(self):
        if self.left:  # 如果存在左子节点,则递归遍历左子树
            self.left.pos_order()
        if self.right:  # 如果存在右子节点,则递归遍历右子树
            self.right.pos_order()
        print(self.data)  # 访问根节点

    # 层序遍历:使用队列按层次顺序访问节点
    def row_order(self):
        queue = deque([self])  # 初始化队列,将根节点加入队列
        while queue:  # 当队列不为空时,进行遍历
            current_tree = queue.popleft()  # 从队列前端取出节点
            print(current_tree.data)  # 访问节点
            if current_tree.left is not None:  # 如果存在左子节点,则加入队列
                queue.append(current_tree.left)
            if current_tree.right is not None:  # 如果存在右子节点,则加入队列
                queue.append(current_tree.right)

    # 自定义遍历:使用栈按特定顺序访问节点
    def custom_order(self):
        stack = [self]  # 初始化栈,将根节点加入栈
        while stack:  # 当栈不为空时,进行遍历
            node = stack.pop()  # 从栈末端取出节点
            print(node.data)  # 访问节点
            if node.right is not None:  # 如果存在右子节点,则加入栈
                stack.append(node.right)
            if node.left is not None:  # 如果存在左子节点,则加入栈
                stack.append(node.left)

# 主程序入口
if __name__ == '__main__':
    # 创建二叉树
    tree = Node('A', Node('B', Node('D'), Node('E')), Node('C', Node('F'), Node('G')))
    print("自定义遍历:")
    tree.custom_order()  # 执行自定义遍历

返回结果:

第一

第二

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

华为eNSP:MSTP

一、什么是MSTP? 1、MSTP是IEEE 802.1S中定义的生成树协议,MSTP兼容STP和RSTP,既可以快速收敛,也提供了数据转发的多个冗余路径,在数据转发过程中实现VLAN数据的负载均衡。 2、MSTP可以将一个或多个VLAN映射到一个Inst…

从零到一:利用 AI 开发 iOS App 《震感》的编程之旅

在网上看到一篇关于使用AI开发的编程经历,分享给大家 作者是如何在没有 iOS 开发经验的情况下,借助 AI(如 Claude 3 模型)成功开发并发布《震感》iOS 应用。 正文开始 2022 年 11 月,ChatGPT 诞生并迅速引发全球关注。…

C++__day1

1、思维导图 2、如果登录失败&#xff0c;提示用户登录失败信息&#xff0c;并且提示错误几次&#xff0c;且重新输入&#xff1b;如果输入错误三次&#xff0c;则退出系统 #include <iostream> using namespace std;int main() {string id , pswd;string user"admi…

MySQL45讲 第二十讲 幻读是什么,幻读有什么问题?

文章目录 MySQL45讲 第二十讲 幻读是什么&#xff0c;幻读有什么问题&#xff1f;一、幻读的定义二、幻读带来的问题&#xff08;一&#xff09;语义问题&#xff08;二&#xff09;数据一致性问题 三、InnoDB 解决幻读的方法四、总结 MySQL45讲 第二十讲 幻读是什么&#xff0…

web与网络编程

使用HTTP协议访问Web 通过发送请求获取服务器资源的Web浏览器等&#xff0c;被成为客户端(client)。 Web使用一种名为HTTP(超文本传输协议)的协议作为规范&#xff0c;完成从客户端到服务器端等一系列运作流程。 可以说&#xff0c;Web时建立在HTTP协议上通信的。 网络基础T…

深入理解接口测试:实用指南与最佳实践5.0(五)

✨博客主页&#xff1a; https://blog.csdn.net/m0_63815035?typeblog &#x1f497;《博客内容》&#xff1a;.NET、Java.测试开发、Python、Android、Go、Node、Android前端小程序等相关领域知识 &#x1f4e2;博客专栏&#xff1a; https://blog.csdn.net/m0_63815035/cat…

2024游戏陪玩app源码的功能介绍/线上陪玩交友上线即可运营软件平台源码搭建流程

一个完整的陪玩交友系统从概念到实现再到维护的全过程得以清晰展现。每一步都需要团队的紧密协作与细致规划&#xff0c;以确保系统既满足用户需求&#xff0c;又具备良好的稳定性和可扩展性。 基础框架 移动端开发框架&#xff1a;如uniapp&#xff0c;它支持多平台开发&…

预测AI如何提升销售绩效管理:五大方式

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

修改数据库和表的字符集

1、修改数据库字符集 mysql> show CHARACTER SET; 查看所有字符集 mysql> show create database wordpress; 查看数据库wordpress当前字符集mysql> alter database wordpress character set gbk; 将数据库wordpress字符集改为gb…

DB-GPT系列(四):DB-GPT六大基础应用场景part1

一、基础问答 进入DB-GPT后&#xff0c;再在线对话默认的基础功能就是对话功能。这里我们可以和使用通义千问、文心一言等在线大模型类似的方法&#xff0c; 来和DB-GPT进行对话。 但是值得注意的是&#xff0c;DB-GPT的输出结果是在内置提示词基础之上进行的回答&#xff0c…

海量数据面试题

目录 前言 什么是海量数据 一、利用位图解决 二、利用布隆过滤器解决 三、利用哈希切割解决 前言 在大数据时代&#xff0c;海量数据处理已成为技术领域中的一项重要课题。无论是企业级应用、互联网平台&#xff0c;还是人工智能和机器学习的实现&#xff0c;都离不开对大规…

操作系统实验:在linux下用c语言模拟进程调度算法程序

文章目录 1、实验内容2、实验结果及分析3、如何在linux下编写并执行c语言程序以及实验源代码gcc -o test test.c1、实验内容 1)用C语言编程实现对N个进程采用某种进程调度算法(如动态优先权调度算法、先来先服务算法、短进程优先算法、时间片轮转调度算法)调度执行的模拟。…

前端开发迈向全栈之路:规划与技能

一、前端开发与全栈开发的差异 前端开发主要负责构建和实现网页、Web 应用程序和移动应用的用户界面。其工作重点在于网页设计和布局&#xff0c;使用 HTML 和 CSS 技术定义页面的结构、样式和布局&#xff0c;同时运用前端框架和库如 React、Angular 或 Vue.js 等构建交互式和…

GOLANG+VUE后台管理系统

1.截图 2.后端工程截图 3.前端工程截图

中文书籍对《人月神话》的引用(161-210本):微软的秘密

中文书籍对《人月神话》的引用&#xff08;第001到160本&#xff09;>> 《人月神话》于1975年出版&#xff0c;1995年出二十周年版。自出版以来&#xff0c;该书被大量的书籍和文章引用&#xff0c;直到现在热潮不退。 2023年&#xff0c;清华大学出版社推出《人月神话》…

IO流(五):字节流-输入流(Inpustream)、输出流(OutputStream)--使用场景、弊端、注意事项、代码演示。

目录 1、什么是字节流&#xff1f; 2、字节输入流--FileInputStream 2.1 int read()方式代码演示以及注释 2.1.1 读取一个字节 2.1.2 将整个文件挨个字节读取并打印演示 2.2 int read(byte[] buffer)方式代码演示以及注释 2.2 .1 一次读取3字节演示 2.2.2 一次性读取全…

直流保护电路设计及保护器件参数说明和选型

在工控产品设计中时常会涉及到电源保护的电路设计的问题&#xff0c;在深圳瑞隆源电子给出的参考电路来切入主题&#xff0c;对气体放电管、压敏电阻和TVS这三类保护器件的参数及选型进行详细说明&#xff0c;以达到深刻理解的目的。 图1 直流保护电路 举例说明&#xff0c;若…

FastGPT部署通义千问Qwen和智谱glm模型|OneAPI配置免费的第三方API

继这篇博客之后 从零开始FastGPT本地部署|Windows 有同学问&#xff0c;不想在多个平台申请API-Key&#xff0c;不好管理且要付费&#xff0c;有木有白嫖方案呀&#xff1f; 答&#xff1a;有啊。用硅基流动。 注册方法看这篇 【1024送福利】硅基流动送2000万token啦&#xff0…

机器学习day2-特征工程

四.特征工程 1.概念 一般使用pandas来进行数据清洗和数据处理、使用sklearn来进行特征工程 将任意数据&#xff08;文本或图像等&#xff09;转换为数字特征&#xff0c;对特征进行相关的处理 步骤&#xff1a;1.特征提取&#xff1b;2.无量纲化&#xff08;预处理&#xf…

sql数据库-排序查询-DQL

目录 语法 排序方式 举例 将表按年龄从小到大排序 将表按年龄从大到小排序 ​编辑 多重排序 将表按年龄升序&#xff0c;年龄相同按入职时间降序 语法 select * from 表名 order by 字段名1 排序方式1&#xff0c;字段2 排序方式2; 排序方式 升序&#xff1a;ASC&…