news 2026/2/11 8:11:16

二叉树基础

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
二叉树基础

什么是二叉排序树

二叉排序树又称二叉查找树,是一种特殊的二叉树,它的每个节点都包含一个数据域,且具有以下特点:

若左子树不为空,则左子树上所有节点的值均小于它的根节点的值

若右子树不为空,则右子树上所有节点的值均大于它的根节点的值

左、右子树也分别为二叉排序树

这种结构使得二叉排序树具有高效的查找、插入和删除操作特性。

二叉排序树的节点结构

二叉排序树由节点组成,每个节点包含三个部分:数据域、左子树指针和右子树指针。在 Java 中,我们可以用类来定义节点:

public class TreeNode {

public TreeNode lChild; // 左子树指针

public TreeNode rChild; // 右子树指针

public Integer data; // 数据域

// 构造方法,初始化数据

public TreeNode(Integer data){

this.data = data;

}

}

二叉排序树的构建

构建思路

构建二叉排序树的核心是插入操作,插入过程遵循以下规则:

若树为空,则新节点作为根节点

若树不为空,则从根节点开始比较:

若新节点值小于当前节点值,则向左子树移动

若新节点值大于当前节点值,则向右子树移动

重复上述过程,直到找到合适的空位置插入新节点

public class BinaryTree {

// 根节点指针

TreeNode root;

// 插入节点方法

public void create(Integer value){

// 1. 创建新节点

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;

}

}

}

// 后续代码省略...

}

二叉排序树的遍历

二叉排序树的遍历分为深度优先遍历和广度优先遍历两大类。

深度优先遍历(递归实现)

深度优先遍历包括先序遍历、中序遍历和后序遍历,它们的区别在于访问根节点的时机不同。

先序遍历(根左右)

// 先序遍历:根 -> 左 -> 右

void beforeOrder(TreeNode root){

if(root == null){

return;

}

System.out.println(root.data); // 访问根节点

beforeOrder(root.lChild); // 遍历左子树

beforeOrder(root.rChild); // 遍历右子树

}

中序遍历(左根右)

// 中序遍历:左 -> 根 -> 右

void inOrder(TreeNode root){

if(root == null){

return;

}

inOrder(root.lChild); // 遍历左子树

System.out.println(root.data); // 访问根节点

inOrder(root.rChild); // 遍历右子树

}

注意:二叉排序树的中序遍历结果是一个有序序列,这是其重要特性

后序遍历(左右根)

// 后序遍历:左 -> 右 -> 根

void afterOrder(TreeNode root){

if(root == null){

return;

}

afterOrder(root.lChild); // 遍历左子树

afterOrder(root.rChild); // 遍历右子树

System.out.println(root.data); // 访问根节点

}

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

层次遍历按照树的层次依次访问每个节点,需要借助队列来实现:

// 层次遍历

void levelOrder(TreeNode root){

LinkedList<TreeNode> queue = new LinkedList<TreeNode>();

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 class Test {

public static void main(String[] args) {

BinaryTree tree = new BinaryTree();

// 插入节点

tree.create(5);

tree.create(3);

tree.create(7);

tree.create(0);

tree.create(4);

tree.create(6);

tree.create(9);

System.out.println("先序遍历:");

tree.beforeOrder(tree.root);

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

上海交大造出手机AI助手ColorAgent:不只是工具,更像贴心伙伴

这项突破性研究由上海交通大学与OPPO研究院联合完成&#xff0c;研究成果发表于2025年10月22日的arXiv预印本平台&#xff0c;论文编号为arXiv:2510.19386v1。研究团队由来自上海交通大学的李宁、吴正、张伟明等多位学者&#xff0c;以及OPPO研究院的林旗强、莫晓芸、赵音等专家…

作者头像 李华
网站建设 2026/2/8 15:11:07

机器视觉介绍

机器视觉的定义机器视觉&#xff08;Machine Vision&#xff09;是指通过计算机和图像处理技术模拟人类视觉功能&#xff0c;实现对物体识别、测量、定位和分析的自动化系统。广泛应用于工业检测、自动驾驶、医疗影像等领域。机器视觉的核心技术图像采集 通过摄像头、工业相机或…

作者头像 李华
网站建设 2026/2/10 9:38:41

基于鲹鱼优化算法(GTO)优化Canopy聚类附matlab代码

✅作者简介&#xff1a;热爱科研的Matlab仿真开发者&#xff0c;擅长数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。 &#x1f34e; 往期回顾关注个人主页&#xff1a;Matlab科研工作室 &#x1f34a;个人信条&#xff1a;格物致知,完整Matlab代码获取及仿…

作者头像 李华
网站建设 2026/2/5 14:20:30

IMU和GPS ekf融合定位 从matlab到c++代码实现 基于位姿状态方程

IMU和GPS ekf融合定位 从matlab到c代码实现 基于位姿状态方程&#xff0c;松耦合 文档且详细 蹲在实验室捯饬了三天咖啡机之后&#xff0c;我终于把IMU和GPS的EKF融合算法从Matlab搬到了C。这事儿就像把乐高积木从说明书模式切换到自由创作模式——你知道原理是对的&#xff0…

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

无人值守地区的可靠选择 的远程监测能力

对于环境恶劣的高山、海岛、边境、自然保护区等无人值守的边远地区&#xff0c;建立自动气象站面临供电难、维护难、环境苛刻度高等多重挑战。FST200-207抗冰冻型超声波风速风向传感器的低功耗、高可靠和易集成的特点&#xff0c;使其成为此类应用的理想解决方案。 超声波风速…

作者头像 李华
网站建设 2026/2/10 21:38:04

linux部署分布式redis集群保姆级教程

一、Redis常用的三种集群模式主从&#xff08;单体架构项目&#xff09;通过持久化功能&#xff0c;Redis保证了即使在服务器重启的情况下也不会丢失&#xff08;或少量丢失&#xff09;数据&#xff0c;因为持久化会把内存中数据保存到硬盘上&#xff0c;重启会从硬盘上加载数…

作者头像 李华