news 2026/6/23 1:52:03

二叉排序树的构建与遍历

作者头像

张小明

前端开发工程师

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/23 2:40:33

AI风险行为识别系统开发:给安全防护装个“智能哨兵”

不管是商场安防、金融转账&#xff0c;还是网络运营&#xff0c;识别风险行为都是守住安全的关键。但传统识别方式太“笨拙”&#xff1a;监控室人员熬红眼睛盯屏&#xff0c;难免漏看异常&#xff1b;靠固定规则筛查金融诈骗&#xff0c;又追不上骗子的新套路。AI风险行为识别…

作者头像 李华
网站建设 2026/6/23 19:11:18

1分钟搞定!用zip命令快速打包你的项目原型

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 开发一个项目原型快速打包工具。功能需求&#xff1a;1. 自动识别项目文件结构 2. 排除版本控制文件(.git等) 3. 生成带时间戳的压缩包 4. 支持自定义包含/排除规则 5. 一键生成部署…

作者头像 李华
网站建设 2026/6/23 1:44:38

28、Linux 文件和目录管理全解析

Linux 文件和目录管理全解析 1. 工作目录管理 在 Linux 中,我们可以通过代码来切换和保存工作目录,就像下面的代码示例: int swd_fd; swd_fd = open (".", O_RDONLY); if (swd_fd == -1) {perror ("open");exit (EXIT_FAILURE); } /* change to a di…

作者头像 李华
网站建设 2026/6/23 19:12:38

雷科电力-REKE610D绝缘油介质损耗电阻率测试仪

一、产品概述&#xff1a;雷科电力-REKE610D绝缘油介质损耗电阻率测试仪依据GB/T5654-2007《液体绝缘材料 相对电容率、介质损耗因数和直流电阻率的测量》设计制造。用于绝缘油等液体绝缘介质的介质损耗因数和直流电阻率的测量。雷科电力-REKE610D绝缘油介质损耗电阻率测试仪一…

作者头像 李华
网站建设 2026/6/23 19:15:21

对于设计IT系统的相关思路

其实所谓的IT系统&#xff0c;他本质上就是一个网站&#xff0c;一个app&#xff0c;一个小程序。 他之所以厉害&#xff0c;是因为&#xff0c;可以瞬时承受大量的访问。 那我们可以如何理解这个IT系统。 以什么思路&#xff0c;来去想这个IT系统&#xff0c;可以一次性&#…

作者头像 李华