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

首先让我们来介绍一下“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日

相关文章

  • 详解js数组的完全随机排列算法

    详解JS数组的完全随机排列算法 1. 算法原理 完全随机排列算法是指将一个数组中的元素完全随机地排列,使每个元素出现在每个位置的可能性相同。 算法的实现原理是: 从数组的最后一个位置开始依次向前遍历,对于每个位置i,随机生成一个介于[0,i]之间的整数j 将位置i上的元素与位置j上的元素交换 经过这样的遍历,整个数组就被完全随机排列了。 2. JS代码实现 …

    算法与数据结构 2023年5月19日
    00
  • c++实现二路归并排序的示例代码

    C++实现二路归并排序是一种常用的排序算法,本文将介绍该算法的详细实现过程,并提供一些示例说明。 一、简述二路归并排序的原理 二路归并排序是一种基于分治思想的排序算法。核心思想是把一个待排序的序列,不断地拆分为两个子序列,直至每个子序列只剩下一个元素,然后利用递归思想将这些子序列不断地两两合并,最终得到一个有序的序列。 二、C++实现二路归并排序的示例代码 …

    算法与数据结构 2023年5月19日
    00
  • JS中多层次排序算法的实现代码

    让我为你介绍一份JS中多层次排序算法的实现代码攻略。 简介 多层次排序是指一个列表需要依据不同的规则进行排序,例如按照价格、销量、评分等进行排序。在JS中,我们可以通过自定义排序函数实现多层次排序。 实现 以下是实现多层次排序的示例代码: const products = [ { name: ‘iPhone 11’, price: 799, sales: 1…

    算法与数据结构 2023年5月19日
    00
  • PHP实现常见排序算法的示例代码

    让我来为你详细讲解“PHP实现常见排序算法的示例代码”的完整攻略。 什么是排序算法 排序算法是计算机科学中的基础算法之一,它将一组对象按照特定的顺序排列。排序算法一般都是以数字为例子,但是排序算法同样适用于字符串、日期、结构体等各种类型的数据。 常见的排序算法 常见的排序算法包括冒泡排序、选择排序、插入排序、快速排序、归并排序等。这里我们将为大家介绍冒泡排序…

    算法与数据结构 2023年5月19日
    00
  • JS深入学习之数组对象排序操作示例

    《JS深入学习之数组对象排序操作示例》是一篇介绍JavaScript数组排序相关操作的文章,主要包含以下内容: 1. 数组对象排序 1.1 sort()方法 sort()方法是JavaScript中的一个数组排序方法,可以用于对数组的元素进行排序。sort()方法可以接收一个可选的排序函数作为参数,通过这个函数,我们可以实现自定义的排序规则。 语法为:arr…

    算法与数据结构 2023年5月19日
    00
  • 关于Python排序问题(冒泡/选择/插入)

    关于Python排序问题,一般包括冒泡排序、选择排序和插入排序。下面分别进行介绍。 冒泡排序 冒泡排序就是重复地走访过要排序的数列,一次比较两个元素,如果它们的顺序错误就把它们交换过来。重复地进行以上操作,直到没有可以交换的元素为止。 示例代码: def bubble_sort(arr): n = len(arr) for i in range(n-1): …

    算法与数据结构 2023年5月19日
    00
  • 思科CCNA认证学习笔记(一)网络基础知识

    思科CCNA认证学习笔记(一)网络基础知识攻略 概述 思科CCNA认证是网络行业的重要认证之一,具有广泛的认可度和传播力。其中网络基础知识是CCNA考试的重要内容,对于初学者来说,掌握网络基础知识是入门的必经之路。本篇攻略将详细讲解网络基础知识的相关内容,包括讲解网络的概念、网络的分类、网络的拓扑结构、网络的协议以及网络的设备。 网络的概念 网络是由两台或两…

    算法与数据结构 2023年5月19日
    00
  • PHP快速排序算法实现的原理及代码详解

    下面我就详细讲解一下“PHP快速排序算法实现的原理及代码详解”的完整攻略。 一、快速排序算法的原理 快速排序(Quicksort)是非常常用的排序算法,其基本思想是通过一趟排序将待排记录分隔成独立的两部分,其中一部分记录的关键字均比另一部分的记录关键字小,然后分别对这两部分记录继续进行排序,重复上述过程,直到整个序列有序为止。 具体流程如下: 从数列中挑出一…

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