news 2026/2/26 20:40:06

二叉排序树的插入、先序/中序/后序/层次遍历、节点查询

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
二叉排序树的插入、先序/中序/后序/层次遍历、节点查询

一、概念

二叉排序树(也叫二叉搜索树)是一种基于 “左小右大” 规则的有序二叉树

特点:

  • 左子节点的值小于父节点的值
  • 右子节点的值大于父节点的值
  • 每个节点由 3 部分组成(类 / 对象结构):
    • lChild:左子节点引用
    • data:节点存储的数据
    • rChild:右子节点引用

二、节点定义

package com.qcby.Tree; public class TreeNode { public TreeNode lChild; // 左子节点 public TreeNode rChild; // 右子节点 public Integer data; // 节点数据 // 构造方法:初始化节点数据 public TreeNode(Integer data) { this.data = data; } }

三、二叉排序树的相关操作

包括创建(插入节点)、遍历、查询

1. 新建(插入节点)

插入节点的逻辑遵循 “左小右大” 的规则,步骤如下:

  1. 若树为空(root == null),新节点直接作为根节点;
  2. 若树非空,循环判断新节点与当前节点的大小:
    • 新节点值大于当前节点:向右子树查找,直到右子节点为空,插入新节点;
    • 新节点值小于 / 等于当前节点:向左子树查找,直到左子节点为空,插入新节点。
package com.qcby.Tree; import java.util.LinkedList; public class BinaryTree { TreeNode root; // 二叉树根节点 // 向二叉排序树插入节点 public void create(Integer value) { TreeNode newNode = new TreeNode(value); // 情况1:树为空,新节点作为根 if (root == null) { root = newNode; return; } // 情况2:树非空,循环查找插入位置 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; } } } }

2. 遍历操作

二叉排序树支持 4 种常见遍历方式,分别对应不同的访问顺序:

(1)先序遍历(根→左→右)
// 先序遍历 public void beforeOrder(TreeNode node) { if (node == null) { return; } System.out.print(node.data + " "); // 访问根 beforeOrder(node.lChild); // 遍历左子树 beforeOrder(node.rChild); // 遍历右子树 }
(2)中序遍历(左→根→右)

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

// 中序遍历 public void inOrder(TreeNode node) { if (node == null) { return; } inOrder(node.lChild); // 遍历左子树 System.out.print(node.data + " "); // 访问根 inOrder(node.rChild); // 遍历右子树 }
(3)后序遍历(左→右→根)
// 后序遍历 public void afterOrder(TreeNode node) { if (node == null) { return; } afterOrder(node.lChild); // 遍历左子树 afterOrder(node.rChild); // 遍历右子树 System.out.print(node.data + " "); // 访问根 }
(4)层次遍历(广度优先,按层级访问)

通过队列实现,依次访问每一层的节点:

// 层次遍历 public void levelOrder(TreeNode root) { if (root == null) { return; } LinkedList<TreeNode> queue = new LinkedList<>(); queue.add(root); while (!queue.isEmpty()) { TreeNode node = queue.poll(); System.out.print(node.data + " "); // 访问当前节点 if (node.lChild != null) { queue.add(node.lChild); // 左子节点入队 } if (node.rChild != null) { queue.add(node.rChild); // 右子节点入队 } } }

3. 节点查询

利用 “左小右大” 的特性,递归查找目标节点:

// 递归查询指定节点 public TreeNode find(TreeNode root, Integer data) { if (root == null) { // 节点为空,未找到 return null; } if (root.data.equals(data)) { // 找到目标节点 return root; } if (root.data < data) { // 目标值更大,查右子树 return find(root.rChild, data); } else { // 目标值更小,查左子树 return find(root.lChild, data); } }
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/2/19 21:21:37

插座工程量一键识别-图块统计告别人工点数

插座工程量一键识别-图块统计告别人工点数 电气图纸中插座数量种类繁多&#xff0c;传统人工逐个点数易疲劳、易出错。借助CAD快速看图的【图形识别】&#xff0c;可自动识别并分类统计各类插座工程量&#xff0c;一键生成工程量汇总表&#xff0c;实现插座工程量的高效精准计…

作者头像 李华
网站建设 2026/2/17 20:55:42

SQL必会必知整理-11-分组数据

11.1 数据分组SQL聚集函数可用来汇总数据。这使我们能够对行进行计数&#xff0c;计算和与平均数&#xff0c;获得最大和最小值而不用检索所有数据。但如果要返回每个供应商提供的产品数&#xff0c;或者返回只提供单项产品的供应商所提供的产品&#xff0c;或返回提供10个以上…

作者头像 李华
网站建设 2026/2/23 20:36:48

企业绩效管理痛点如何破?一体化智能平台实操方案

在企业人力资源管理中&#xff0c;绩效管理是连接员工发展与组织目标的关键环节。传统绩效管理模式常面临流程割裂、数据分散、反馈滞后等问题&#xff0c;导致绩效评估流于形式&#xff0c;难以真正发挥激励作用。而一体化智能绩效管理平台通过整合绩效流程、智能数据分析、全…

作者头像 李华
网站建设 2026/2/7 1:46:45

工业边缘节点应用:DeepSeek处理实时产线数据的低功耗配置方案

工业边缘节点应用&#xff1a;DeepSeek处理实时产线数据的低功耗配置方案摘要随着工业4.0和智能制造的深入发展&#xff0c;工业边缘计算作为连接物理世界与数字世界的桥梁&#xff0c;其重要性日益凸显。工业边缘节点部署于生产现场&#xff0c;负责实时采集、处理和分析产线数…

作者头像 李华
网站建设 2026/2/27 0:17:29

小程序毕设项目:基于springboot+微信小程序的公务员助学系统小程序的设计与实现(源码+文档,讲解、 调试运行,定制等)

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

作者头像 李华
网站建设 2026/2/24 9:15:35

Java计算机毕设之基于springboot+vue的少儿编程知识刷题学习系统基于Java的scratch少儿编程学习网站系统的设计与实现(完整前后端代码+说明文档+LW,调试定制等)

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

作者头像 李华