树的前中后序遍历

树是一种重要的非线性数据结构,尤其是二叉树。二叉树的遍历是操作树的基础,主要有前序遍历、中序遍历和后序遍历三种方式。

前序遍历

访问顺序:根结点 -> 左子树 -> 右子树。
遍历规则:首先访问根结点,然后递归地遍历左子树,最后递归地遍历右子树。
代码示例:

function preOrderTraversal(node) {if (!node) return;console.log(node.val);preOrderTraversal(node.left);preOrderTraversal(node.right);
}

中序遍历:

访问顺序:左子树 -> 根结点 -> 右子树。
遍历规则:首先递归地遍历左子树,然后访问根结点,最后递归地遍历右子树。
代码示例:

function inOrderTraversal(node) {if (!node) return;inOrderTraversal(node.left);console.log(node.val);inOrderTraversal(node.right);
}

后序遍历:

访问顺序:左子树 -> 右子树 -> 根结点。
遍历规则:首先递归地遍历左子树,然后递归地遍历右子树,最后访问根结点。
代码示例:

function postOrderTraversal(node) {if (!node) return;postOrderTraversal(node.left);postOrderTraversal(node.right);console.log(node.val);
}

树排序算法

树排序算法是一种基于二叉搜索树的排序算法。树排序通过将数据插入到二叉搜索树中,然后进行中序遍历从而实现排序。
二叉搜索树的节点定义:

class TreeNode {constructor(val) {this.val = val;this.left = null;this.right = null;}
}

二叉搜索树的性质:
对于树中的每个节点,其左子树中的所有节点值小于该节点值,右子树中的所有节点值大于该节点值。
树排序的实现:
构建二叉搜索树:将待排序数据依次插入到二叉搜索树中。
插入节点到二叉搜索树:

function insert(root, val) {if (!root) return new TreeNode(val);if (val < root.val) {root.left = insert(root.left, val);} else {root.right = insert(root.right, val);}return root;
}

中序遍历:对二叉搜索树进行中序遍历,得到一个有序序列。
代码示例:

function inOrderTraversalCollect(root, sortedArray) {if (!root) return;inOrderTraversalCollect(root.left, sortedArray);sortedArray.push(root.val);inOrderTraversalCollect(root.right, sortedArray);
}

树排序:

function treeSort(arr) {let root = null;for (let val of arr) {root = insert(root, val);}let sortedArray = [];inOrderTraversalCollect(root, sortedArray);for (let i = 0; i < arr.length; i++) {arr[i] = sortedArray[i];}
}// 测试树排序
let arr = [5, 3, 8, 1, 2, 9];
console.log("排序前:");
console.log(arr);
treeSort(arr);
console.log("排序后:");
console.log(arr);

复杂度分析:
平均时间复杂度:O(n log n),其中 n 是待排序的元素个数。
最坏时间复杂度:O(n^2),当数据已经有序时,二叉搜索树会退化为链表结构。
优化方法:使用平衡二叉搜索树(如 AVL 树或红黑树)代替普通二叉搜索树,确保树的高度保持在 O(log n),从而保证时间复杂度为 O(n log n)。

总结
树的前中后序遍历是操作二叉树的基础,通过递归实现可以方便地访问树中的节点。树排序算法是一种基于二叉搜索树的排序算>法,通过中序遍历可以得到有序序列。虽然树排序的时间复杂度在平均情况下为 O(n log n),但在最坏情况下会退化为 O(n^2)。>使用平衡二叉搜索树可以有效地优化树排序算法的性能。

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

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

解码 Red Stuff:Walrus 高效可靠存储的引擎

Red Stuff 是 Walrus 所采用的二维&#xff08;2D&#xff09;纠删码协议&#xff0c;定义了数据如何被编码和存储。它是实现高效、安全、且高可用的去中心化存储的关键。通过 Red Stuff&#xff0c;Walrus 成功解决了去中心化存储系统常见的三大难题&#xff1a;安全性、复制效…

【ACP】阿里云云计算高级运维工程师--ACP

文章目录1、简要介绍2、核心特点3、考试相关信息4、适合人群1、简要介绍 阿里云云计算认证ACP&#xff08;Alibaba Cloud Certified Professional&#xff09;是面向云计算技术与应用从业者的专业级认证&#xff0c;旨在评估考生对阿里云云计算产品的理解、部署、运维及最佳实…

快速掌握Python编程基础

干货分享&#xff0c;感谢您的阅读&#xff01;备注&#xff1a;本博客将自己初步学习Python的总结进行分享&#xff0c;希望大家通过本博客可以在短时间内快速掌握Python的基本程序编码能力&#xff0c;如有错误请留言指正&#xff0c;谢谢&#xff01;&#xff08;持续更新&a…

「Java案例」鸡兔同笼问题

案例解析 鸡兔同笼求解 《孙子算经》是中国古代重要的数学著作&#xff0c;成书于南北朝时期&#xff0c;其中就记载了一个有趣的问题&#xff1a;鸡和兔在同一个笼子里&#xff0c;鸡和兔共有n条腿&#xff0c; m个头&#xff0c;问鸡和兔各有多少只&#xff1f;编写一个程序…

BLDC电机-运动控制---stm32时钟树定时器SYSTICKRTC的学习

一、时钟树 二、基本定时器 三、通用定时器 四、高级定时器 五、SYSTICK 六、RTC

Implementing a User-Defined Preconditioner in PETSc

文章目录Implementing a User-Defined Preconditioner in PETScBasic ApproachExample ImplementationUsing Your PreconditionerAdvanced OptionsImportant NotesUsing PCShell to Implement User-Defined Preconditioners in PETScBasic Implementation StepsAdvanced Featur…

DotNetBrowser 3.3.0 版本发布啦!

#Chromium 137 安全修复一次调用即可下载 URL更新了 Widevine APIDOM 元素绝对边界 &#x1f517; 点击此处了解更多详情。 &#x1f193; 获取 30 天免费试用。

Android-自定义View的实战学习总结

一、自定义View歌词界面LrcView 类-->自定义的歌词视图1. 构造函数和属性初始化自定义 View 通常需要提供多个构造函数以支持不同的初始化方式。在 LrcView 中&#xff0c;提供了四个构造函数&#xff0c;最终调用 super 父类构造函数完成初始化&#xff0c; context.obtain…

Maven 在 Eclipse 中的使用指南

Maven 在 Eclipse 中的使用指南 概述 Maven 是一个强大的构建自动化工具,用于项目管理和构建。它简化了项目构建、依赖管理和项目报告等任务。Eclipse 是一个流行的集成开发环境(IDE),支持多种编程语言,包括 Java。本文将详细介绍如何在 Eclipse 中使用 Maven 进行项目管…

zxing去白边

2025年了&#xff0c;可能干不了几年了&#xff0c;还能写这种文章还是有点可笑。 背景 zxing库生成的二维码自带白边 分析 生产二维码主要分两步&#xff1a; 1.用QRCodeWriter生成BitMatrix信息 2.根据信息生成bitmap 问题在1。 生成二维码的尺寸实际是有一些规格的&a…

Linux操作系统之文件(三):缓冲区

前言&#xff1a; 上节课我们讲授重定向的概念时&#xff0c;曾提到了一点缓冲区的概念。本文将会为大家更详细的带来缓冲区的有关内容&#xff1a;用户级缓冲区是什么&#xff0c;以及其与内核级缓冲区的关系&#xff0c;最后&#xff0c;我会为大家模拟实现一下stdio.h的关于…

Linux云计算基础篇(7)

一、< 输入重定向 wc -l < filelist .txt 统计数据&#xff0c;从file这个文件拿结果。 二、tr 转换字符命令 $ tr A-Za-z<.bash_profile 将bash_profile文件中的大写字符全部转成小写字符 三、管道符&#xff08;|&#xff09; com…

【学习笔记】Lean4基础 ing

文章目录 概述参考文档运行程序elan 命令行工具lean 命令行工具lake 命令行工具运行单文件程序Hello, world!验证 Lean4 证明 运行多文件项目 Lean4 基础语法注释表达式求值变量和定义定义类型变量 定义函数命名规则命名空间数据类型结构体构造子模式匹配多态List 列表Option 可…

FPGA实现40G网卡NIC,基于PCIE4C+40G/50G Ethernet subsystem架构,提供工程源码和技术支持

目录 1、前言工程概述免责声明 3、相关方案推荐我已有的所有工程源码总目录----方便你快速找到自己喜欢的项目我这里已有的以太网方案 4、工程详细设计方案工程设计原理框图测试用电脑PClE4CDMA40G/50G Ethernet subsystem工程源码架构驱动和测试文件 5、Vivado工程详解1详解&a…

SAP从入门到放弃系列之流程管理概述

文章目录前言1.Process Management&#xff08;过程管理&#xff09;2.关键术语2.1Control recipe destination2.2 Process instruction characteristic2.3 Process message characteristic2.4 Process instruction category2.5 Process message category2.6 PI sheet3.关键配置…

RCLAMP0554S.TCT升特Semtech 5通道TVS二极管,0.5pF+20kV防护,超高速接口!

RCLAMP0554S.TCT&#xff08;Semtech&#xff09;产品解析与推广文案 一、产品定位 RCLAMP0554S.TCT是Semtech&#xff08;升特半导体&#xff09;推出的5通道超低电容TVS二极管阵列&#xff0c;专为超高速数据接口&#xff08;USB4/雷电4/HDMI 2.1&#xff09;提供静电放电&a…

【人工智能】DeepSeek的AI实验室:解锁大语言模型的未来

《Python OpenCV从菜鸟到高手》带你进入图像处理与计算机视觉的大门! 解锁Python编程的无限可能:《奇妙的Python》带你漫游代码世界 DeepSeek作为中国AI领域的先锋,以其开源大语言模型(LLM)DeepSeek-V3和DeepSeek-R1在全球AI研究中掀起波澜。本文深入探讨DeepSeek AI实验…

nacos+nginx动态配置大文件上传限制

前言 今天还要跟大家分享的一个点就是微服务网关gateway用webflux响应式不用servlet后&#xff0c;引发的一个忽略点差点在演示的时候炸锅&#xff0c;也不多讲废话&#xff0c;说说现象&#xff0c;说说处理就了事。 一、上传超过20MB的视频报错 配置在nacos里&#xff0c;读…

mr 任务运行及jar

mainclass如下&#xff1a;LoggingDriver

Python 数据分析:numpy,抽提,整数数组索引与基本索引扩展(元组传参)。听故事学知识点怎么这么容易?

目录1 代码示例2 欢迎纠错3 论文写作/Python 学习智能体------以下关于 Markdown 编辑器新的改变功能快捷键合理的创建标题&#xff0c;有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右Sm…