news 2026/6/10 1:29:09

二叉树基础

作者头像

张小明

前端开发工程师

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/6/10 10:56:10

光储并网直流微电网仿真模型设计与实现

光储并网直流微电网仿真模型&#xff08;matlab/simulink&#xff0c;2018&#xff09;&#xff0c;包含&#xff1a; 1.MPPT模块&#xff0c;实现光伏输入最大功率跟踪&#xff1b; 2.储能电池模块&#xff1b; 3.超级电容模块&#xff1b; 控制策略简介&#xff1a; 糸统使用…

作者头像 李华
网站建设 2026/6/10 10:51:45

企业流程优化必备:SIPOC流程图揭秘

在企业运营过程中&#xff0c;很多管理者都会面临这样的困扰&#xff1a;企业流程复杂&#xff0c;各个环节之间的关系难以梳理清楚&#xff0c;导致效率低下、成本增加。这时候&#xff0c;就需要一个强大的工具来帮助我们优化流程&#xff0c;而SIPOC流程图就是这样一个企业流…

作者头像 李华
网站建设 2026/6/9 16:07:18

python(爬虫selenium)

Selenium 是一款用于模拟浏览器行为的自动化测试工具&#xff0c;也是爬虫领域中处理动态渲染页面&#xff08;如 JS 加载、Ajax 请求、登录验证等&#xff09;的核心工具。一、导入库from selenium import webdriverfrom selenium.webdriver.edge.options import Optionsfrom …

作者头像 李华
网站建设 2026/6/10 10:55:34

Vue3利用ResizeObserver监听Textarea的尺寸动态调整表格tbody的maxHeight

调整表格tbody的maxHeight推荐方式是直接修改css&#xff0c;本文主要描述的是不推荐但使用ResizeObserver再进一步修改dom的maxHeight&#xff08;之所以选择ResizeObserver这个API是因为Textarea默认没有resize事件&#xff09;&#xff0c;从而达到不溢出可视窗口&#xff0…

作者头像 李华
网站建设 2026/6/10 10:52:24

命令执行绕过

直接闹麻了 &#xff0c;命令执行绕不过空格的来了&#x1f923;&#xff0c;都能执行命令了&#xff0c;空格绕不过去直接全盘皆失赶紧补充一下自己的命令执行绕过知识&#x1f62d;空格绕过\t%09${IFS}$IFS$9$IFS%20{} 例如 &#xff1a;{cat,1.txt}<或是 << 例如 :…

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

大神优化 PDF工具箱神器,强烈推荐

PDF工具箱之前也给大家推荐过好&#xff0c;今天在给大家推荐一个非常好用功能有一些不一样的软件。 ABBYY FineReader PDF工具箱 这款PDF工具箱是俄罗斯大神优化出品的&#xff0c;功能强大&#xff0c;它集成了OCR 文字识别、文档处理、文件转换和索引、数据捕获、语言翻译等…

作者头像 李华