Java 构建二叉搜索树并进行删除和中序遍历的程序

17 Mar 2025 | 5 分钟阅读

在此程序中,我们需要创建一个二叉搜索树,从树中删除一个节点,并通过中序遍历(左 -> 根 -> 右)来显示树的节点。在中序遍历中,对于给定节点,我们首先遍历左子节点,然后是根节点,最后是右子节点。

Java program to construct a Binary Search Tree and perform deletion and In-order traversal

二叉搜索树中,所有位于根节点左侧的节点都将小于根节点,而位于右侧的节点将大于根节点。

插入

  • 如果新节点的值小于根节点,则它将被插入到左子树中。
  • 如果新节点的值大于根节点,则它将被插入到右子树中。

删除

  • 如果待删除的节点是叶节点,则该节点的父节点将指向空。例如,如果我们删除90,则父节点70将指向空。
  • 如果待删除的节点有一个子节点,则该子节点将成为父节点的子节点。例如,如果我们删除30,则作为30左子节点的节点10将成为50的左子节点。
  • 如果待删除的节点有两个子节点,则我们从该当前节点的右子树中找到具有最小值的节点(minNode)。当前节点将被其后继节点(minNode)替换。

算法

  • 定义Node类,它有三个属性:dataleftright。其中,left表示节点的左子节点,right表示节点的右子节点。
  • 创建节点时,数据将传递给节点的数据属性,left和right都将设置为null。
  • 定义另一个类,该类有一个 root 属性。
    • Root 表示树的根节点,并将其初始化为 null。

a. insert() 将新值插入到二叉搜索树中

  • 它检查根节点是否为null,这意味着树是空的。新节点将成为树的根节点。
  • 如果树不为空,它将比较新节点的值与根节点。如果新节点的值大于根节点,则新节点将被插入到右子树中。否则,它将被插入到左子树中。

a. deleteNode() 将从树中删除特定节点

  • 如果待删除节点的值小于根节点,则在左子树中搜索节点。否则,在右子树中搜索。
  • 如果找到节点且它没有子节点,则将该节点设置为null。
  • 如果节点有一个子节点,则子节点将取代节点的位置。
  • 如果节点有两个子节点,则从其右子树中找到一个最小值节点。该最小值节点将替换当前节点。

程序

输出

Binary search tree after insertion:
10 30 50 60 70 90 
Binary search tree after deleting node 90:
10 30 50 60 70 
Binary search tree after deleting node 30:
10 50 60 70 
Binary search tree after deleting node 50:
10 60 70 
下一个主题Java 程序