JavaScript数据结构与算法之二叉树添加/删除节点操作示例

yizhihongxing

首先让我们来介绍一下“JavaScript数据结构与算法之二叉树添加/删除节点操作示例”这个主题。

主题介绍

本主题主要介绍了在 JavaScript 中对于二叉树数据结构进行添加/删除节点操作的示例代码。二叉树是一种常见的树形结构,在计算机科学领域中被广泛应用。节点的添加与删除是该数据结构中常见的操作之一,本主题将通过示例代码,为您详细介绍操作的过程。

代码实现

首先,我们需要定义一个二叉树的节点类,包含一个值属性和左右子节点属性。这里我先给出一个简单的实现。

class TreeNode {
  constructor(val) {
    this.val = val;
    this.left = null;
    this.right = null;
  }
}

接下来,我们需要定义实现添加节点的函数 insert。这个函数的过程包含了二叉树的遍历、查找、新建节点等过程。

insert(val) {
  const newNode = new TreeNode(val);
  if (this.root === null) {
    this.root = newNode;
    return this;
  } else {
    let current = this.root;

    while (true) {
      if (val === current.val) return undefined;

      if (val < current.val) {
        if (current.left === null) {
          current.left = newNode;
          return this;
        } else {
          current = current.left;
        }
      } else {
        if (current.right === null) {
          current.right = newNode;
          return this;
        } else {
          current = current.right;
        }
      }
    }
  }
}

以上是二叉树添加节点的代码示例。

接下来,我们介绍删除节点的代码示例。删除节点的实现需要考虑到三种情况:

  • 节点没有子节点,直接删除即可
  • 节点有一个子节点,将该子节点替代被删除节点
  • 节点有两个子节点,需要在右子树中寻找最小值节点,并将该节点替代被删除节点

下面是实现删除节点的代码示例:

delete(val) {
  if (this.root === null) return false;

  let currentNode = this.root;
  let parentNode = null;
  let isLeftChild = false;

  while (currentNode !== null) {
    if (val === currentNode.val) {
      if (currentNode.left === null && currentNode.right === null) {
        if (currentNode === this.root) {
          this.root = null;
        } else if (isLeftChild) {
          parentNode.left = null;
        } else {
          parentNode.right = null;
        }
      } else if (currentNode.left === null) {
        if (currentNode === this.root) {
          this.root = currentNode.right;
        } else if (isLeftChild) {
          parentNode.left = currentNode.right;
        } else {
          parentNode.right = currentNode.right;
        }
      } else if (currentNode.right === null) {
        if (currentNode === this.root) {
          this.root = currentNode.left;
        } else if (isLeftChild) {
          parentNode.left = currentNode.left;
        } else {
          parentNode.right = currentNode.left;
        }
      } else {
        let replacementNode = currentNode.right;
        let replacementParentNode = currentNode;

        while (replacementNode.left !== null) {
          replacementParentNode = replacementNode;
          replacementNode = replacementNode.left;
        }

        if (replacementNode !== currentNode.right) {
          replacementParentNode.left = replacementNode.right;
          replacementNode.right = currentNode.right;
        }

        if (currentNode === this.root) {
          this.root = replacementNode;
        } else if (isLeftChild) {
          parentNode.left = replacementNode;
        } else {
          parentNode.right = replacementNode;
        }

        replacementNode.left = currentNode.left;
      }

      return true;
    } else if (val < currentNode.val) {
      parentNode = currentNode;
      currentNode = currentNode.left;
      isLeftChild = true;
    } else {
      parentNode = currentNode;
      currentNode = currentNode.right;
      isLeftChild = false;
    }
  }

  return false;
}

以上就是二叉树删除节点的代码示例。

示例说明

此处给出两个关于添加节点和删除节点操作的示例,方便您了解二叉树数据结构的操作过程。

示例一:添加节点操作

假设有一个空白的二叉树,我们要添加以下数据:6, 4, 8, 3, 5, 7, 9。

const bst = new BinarySearchTree();
bst.insert(6);
bst.insert(4);
bst.insert(8);
bst.insert(3);
bst.insert(5);
bst.insert(7);
bst.insert(9);

这样就完成了二叉树的添加节点操作。

示例二:删除节点操作

假设有一个已经包含数据 6, 4, 8, 3, 5, 7, 9 的二叉树,我们需要删除节点为 4 的节点。

const bst = new BinarySearchTree();
bst.insert(6);
bst.insert(4);
bst.insert(8);
bst.insert(3);
bst.insert(5);
bst.insert(7);
bst.insert(9);
bst.delete(4);

这样就完成了二叉树的删除节点操作。

总结

二叉树作为一种常见的树形数据结构,在很多场景下都有广泛的应用。本文通过 JavaScript 实现的方式,为您介绍了二叉树的添加、删除节点操作。希望这篇文章能够对您理解二叉树数据结构有所帮助。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:JavaScript数据结构与算法之二叉树添加/删除节点操作示例 - Python技术站

(0)
上一篇 2023年5月19日
下一篇 2023年5月19日

相关文章

  • Python实现堆排序案例详解

    Python实现堆排序案例详解 堆排序简介 堆排序是一种基于树形数据结构的排序算法,它的时间复杂度为 O(nlogn),堆排序分为大根堆和小根堆,当堆为大根堆时,堆中每个节点的值都大于或等于其孩子节点的值,当堆为小根堆时,堆中每个节点的值都小于或等于其孩子节点的值。 堆的基本概念 堆是一种完全二叉树,它可以用数组来表示,数组下标从 1 开始,对于下标为 i …

    算法与数据结构 2023年5月19日
    00
  • python manim实现排序算法动画示例

    首先,为了能够实现“python manim实现排序算法动画示例”,我们需要以下准备工作: 安装python及相关依赖:Manim(用于动画制作)、Numpy(用于数值计算)等。 了解Python编程语言的基础语法和数据类型。 接下来,我们可以按照以下步骤进行排序算法动画制作: 选择一种排序算法,并按照代码形式将其实现。 使用Python的可视化库,将算法过…

    算法与数据结构 2023年5月19日
    00
  • Golang实现四种负载均衡的算法(随机,轮询等)

    Golang实现四种负载均衡的算法(随机,轮询等) 负载均衡是指在分布式系统中,将工作负载分摊到多个计算资源来进行共同处理的技术。 Golang作为一种高性能、可靠性语言,天然适合做负载均衡,因此我们可以用Golang实现四种常用的负载均衡算法。 什么是负载均衡算法? 负载均衡算法是指在分发服务时,选择合适的服务器来处理请求的一种算法。负载均衡可分为静态负载…

    算法与数据结构 2023年5月19日
    00
  • Python实现查找数组中任意第k大的数字算法示例

    Python实现查找数组中任意第k大的数字算法示例 本文将介绍如何使用Python语言实现查找数组中任意第k大的数字算法,并提供两个示例进行说明。 算法概述 查找数组中任意第k大的数字算法通常采用快速排序算法,它的基本思想是通过一趟排序将待排记录分隔成独立的两部分,其中一部分记录的关键字均比另一部分记录的关键字小,然后再按此方法对这两部分记录分别进行快速排序…

    算法与数据结构 2023年5月19日
    00
  • Python实现选择排序

    当我们需要对一个列表或数组进行排序时,选择排序是一种简单易懂的方法。Python是一种非常流行的编程语言,它可以轻松实现选择排序。 以下是Python实现选择排序的攻略: 选择排序的原理 选择排序是一种简单直观的排序算法,其基本思想是每次选择出最小的元素,放到已经排好序的部分的末尾。 实现步骤 找到未排序部分的最小元素; 将其放在已排序部分的末尾; 重复步骤…

    算法与数据结构 2023年5月19日
    00
  • php通过ksort()函数给关联数组按照键排序的方法

    如果需要将PHP关联数组按照键进行排序,可以使用ksort()函数。以下是使用ksort()函数给关联数组按照键排序的完整攻略: 第一步:创建一个关联数组 首先,创建一个包含多个元素的关联数组,这些元素都是键/值对。 $assoc_array = array( "name" => "John", "ag…

    算法与数据结构 2023年5月19日
    00
  • 基于C++实现的各种内部排序算法汇总

    基于C++实现的各种内部排序算法汇总 概述 本攻略汇总了常见的基于C++实现的内部排序算法,包括选择排序、冒泡排序、插入排序、希尔排序、归并排序、快速排序、堆排序。以下是算法的具体实现过程。 选择排序 选择排序的核心思想是每次找到未排序序列中的最小值,然后放到已排序序列的末尾。具体实现过程如下: void selection_sort(vector<i…

    算法与数据结构 2023年5月19日
    00
  • C语言直接选择排序算法详解

    C语言直接选择排序算法详解 什么是选择排序算法 选择排序算法(Selection Sort)是一种简单直观的排序算法。该算法每次从未排序的数中选择最小(或最大)的一个数,将其放在已排序数列的末尾,直到所有数排序完成。因为该算法在每次排序后的下一轮排序不会再考虑之前选择的最小(或最大)值,所以属于不稳定排序算法。 算法流程 选择排序算法主要分为两个步骤: 在未…

    算法与数据结构 2023年5月19日
    00
合作推广
合作推广
分享本页
返回顶部