news 2026/6/15 6:10:45

二叉排序树的构建与遍历

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
二叉排序树的构建与遍历

二叉排序树是一种特殊的二叉树,它的每个节点都满足:左子树所有节点值小于当前节点,右子树所有节点值大于当前节点。

一、二叉排序树的核心结构

首先定义树节点TreeNode,包含左孩子、右孩子和节点值:

public class TreeNode { public TreeNode lChild; public TreeNode rChild; public Integer data; public TreeNode(Integer data){ this.data = data; } }

二、二叉排序树的构建(插入操作)

构建二叉排序树的过程,本质是依次插入节点并维护 “左小右大” 规则的过程。

BinaryTree类的create方法为例:

public class BinaryTree { TreeNode root; public void create(Integer value) { TreeNode newNode = new TreeNode(value); if (root == null) { root = newNode; return; } TreeNode curNode = root; while (true) { if (curNode.data < newNode.data) { if (curNode.rChild == null) { curNode.rChild = newNode; return; } curNode = curNode.rChild; } else { if (curNode.lChild == null) { curNode.lChild = newNode; return; } curNode = curNode.lChild; } } } }

三、二叉排序树的遍历方式

遍历是按一定规则访问树中所有节点的操作,二叉排序树常用深度优先遍历(先序、中序、后序)和广度优先遍历(层次遍历)。

1. 深度优先遍历

(1)先序遍历(根→左→右)
void beforeOrder(TreeNode root) { if (root == null) return; System.out.println(root.data); beforeOrder(root.lChild); beforeOrder(root.rChild); }
(2)中序遍历(左→根→右)

二叉排序树的中序遍历结果是 “升序序列”

void inOrder(TreeNode root) { if (root == null) return; inOrder(root.lChild); System.out.println(root.data); inOrder(root.rChild);
(3)后序遍历(左→右→根)
void afterOrder(TreeNode root) { if (root == null) return; afterOrder(root.lChild); afterOrder(root.rChild); System.out.println(root.data); }

2. 广度优先遍历(层次遍历)

按 “从上到下、从左到右” 的顺序访问节点,借助队列实现:

void levelOrder(TreeNode root) { LinkedList<TreeNode> queue = new LinkedList<>(); queue.add(root); while (!queue.isEmpty()) { root = queue.pop(); System.out.println(root.data); if (root.lChild != null) { queue.add(root.lChild); } if (root.rChild != null) { queue.add(root.rChild); } } }

四、二叉排序树的查找操作

利用 “左小右大” 的特性,查找操作可以快速定位节点:

public TreeNode find(TreeNode root, Integer target) { if (root == null) return null; TreeNode cur = root; while (cur != null) { if (cur.data.equals(target)) { return cur; } else if (cur.data < target) { cur = cur.rChild; } else { cur = cur.lChild; } } return null; }

五、测试验证

package com.qcby; public class Test { public static void main(String[] args) { BinaryTree bt = new BinaryTree(); // 构建二叉排序树 bt.create(5); bt.create(3); bt.create(7); bt.create(0); bt.create(4); bt.create(9); bt.levelOrder(bt.root); Integer target = 8; TreeNode result = bt.find(bt.root, target); if (result != null) { System.out.println("找到了"); } else { System.out.println("没找到"); } } }

结果:

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/15 15:08:37

AI如何帮你自动生成Freemarker模板?快马平台实战

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 请帮我生成一个Freemarker(FTL)模板&#xff0c;用于电商网站的商品详情页展示。要求包含商品名称、价格、图片、规格参数表格、用户评价区域。使用Bootstrap 5框架实现响应式布局&…

作者头像 李华
网站建设 2026/6/14 23:17:50

绿酿新章:酒水行业ESG的全球实践与中国路径

一瓶茅台酒的生产耗水占其全生命周期水足迹的91.42%&#xff0c;这组数据揭开了酒水行业ESG转型的核心命题——当“双碳”目标成为全球共识&#xff0c;ESG&#xff08;环境、社会、治理&#xff09;已从企业社会责任报告的边缘话题&#xff0c;升级为重塑行业竞争力的核心要素…

作者头像 李华
网站建设 2026/6/15 11:46:34

MQ生产者确认机制捕获到消息投递失败后如何重试?

要实现生产者确认机制失败后自动重试重新投递&#xff0c;核心思路是&#xff1a;将发送失败的消息暂存→按策略重试→跟踪重试状态→失败兜底。以下是具体实现思路和关键步骤&#xff0c;结合代码示例说明。一、核心思路框架当生产者通过 ConfirmCallback 收到 ackfalse&#…

作者头像 李华
网站建设 2026/6/14 23:47:10

5分钟用AI创建一个RGBA调色板应用

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 快速生成一个RGBA调色板应用&#xff0c;功能包括&#xff1a;1) 颜色选择器 2) 调色板保存 3) 颜色代码复制 4) 分享功能 5) 历史记录。要求响应式设计&#xff0c;支持PWA安装。使…

作者头像 李华
网站建设 2026/6/15 11:43:59

Visual Studio 十月更新 —— 新模型、记忆功能、计划功能及更多内容

2025年10月的 Visual Studio 2022&#xff08;v17.14&#xff09;更新现已发布。本月&#xff0c;我们为您带来了模型选择和智能体流程方面的改进。1新模型我们的聊天窗口中现已提供 Claude Sonnet 4.5 和 Claude Haiku 4.5。这意味着&#xff0c;推动您的智能体工作流的最新创…

作者头像 李华
网站建设 2026/6/15 11:49:33

怎么给图纸文件加密?2025 年 5 款轻量图纸加密软件分享

图纸文件承载核心设计成果&#xff0c;泄露或篡改可能造成重大损失。2025 年&#xff0c;轻量型加密工具成为技术从业者首选 —— 无需复杂部署&#xff0c;就能实现精准防护。本文精选 5 款实用软件&#xff0c;兼顾安全性与易用性&#xff0c;帮你快速找到适配的图纸加密方案…

作者头像 李华