JS二叉树的简单实现方法示例

yizhihongxing

JS二叉树的简单实现方法示例

二叉树是一种非常重要的数据结构,在计算机科学中有广泛的应用。JS作为一门常用的编程语言,也可以利用其语言特性来实现二叉树。

一、二叉树简介

二叉树是一种最常用的树形数据结构之一,满足以下几个特点:

  • 每个节点最多只有两个子节点,分别为左子节点和右子节点;
  • 左子节点的值小于或等于父节点的值;
  • 右子节点的值大于或等于父节点的值。

二叉树的示意图如下:

      6
     / \
    4   8
   / \
  2   5

二、二叉树的实现

我们可以使用JS的class来实现一个基础的二叉树数据结构。

代码如下:

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

上面的代码定义了一个名为TreeNode的类,它有三个属性:

  • val:表示节点的值;
  • left:表示节点的左子节点;
  • right:表示节点的右子节点。

三、二叉树的操作

1.建立二叉树

我们可以通过建立一个方法,按照给定的顺序将值插入二叉树中,从而建立一个完整的二叉树。

示例代码如下:

class BinaryTree {
  constructor() {
    this.root = null;
  }

  // 向树中插入节点
  insert(val) {
    if (this.root === null) {
      this.root = new TreeNode(val);
      return;
    }

    let node = this.root;

    while (node) {
      if (val < node.val) {
        if (node.left === null) {
          node.left = new TreeNode(val);
          return;
        } else {
          node = node.left;
        }
      } else {
        if (node.right === null) {
          node.right = new TreeNode(val);
          return;
        } else {
          node = node.right;
        }
      }
    }
  }
}

上面的代码定义了一个名为BinaryTree的类,它有一个属性root,表示二叉树的根节点。它还有一个名为insert的方法,用来将一个值插入二叉树中。

2.二叉树的遍历

二叉树的遍历是指按照一定顺序依次访问二叉树中的所有节点。常用的有前序遍历、中序遍历和后序遍历。下面是它们的详细介绍:

前序遍历:

前序遍历的顺序是根节点 -> 左子节点 -> 右子节点。代码示例如下:

class BinaryTree {
  // ...

  // 前序遍历
  preOrderTraversal(node) {
    if (node === null) {
      return;
    }

    console.log(node.val);
    this.preOrderTraversal(node.left);
    this.preOrderTraversal(node.right);
  }
}

中序遍历:

中序遍历的顺序是左子节点 -> 根节点 -> 右子节点。代码示例如下:

class BinaryTree {
  // ...

  // 中序遍历
  inOrderTraversal(node) {
    if (node === null) {
      return;
    }

    this.inOrderTraversal(node.left);
    console.log(node.val);
    this.inOrderTraversal(node.right);
  }
}

后序遍历:

后序遍历的顺序是左子节点 -> 右子节点 -> 根节点。代码示例如下:

class BinaryTree {
  // ...

  // 后序遍历
  postOrderTraversal(node) {
    if (node === null) {
      return;
    }

    this.postOrderTraversal(node.left);
    this.postOrderTraversal(node.right);
    console.log(node.val);
  }
}

四、二叉树的示例

示例一

下面给定了一棵二叉树:

      5
     / \
    3   8
   / \
  1   4

通过上面的代码,我们可以轻松地建立这棵二叉树,并进行前、中、后序遍历。

let binaryTree = new BinaryTree();

binaryTree.insert(5);
binaryTree.insert(3);
binaryTree.insert(8);
binaryTree.insert(1);
binaryTree.insert(4);

console.log('前序遍历');
binaryTree.preOrderTraversal(binaryTree.root);

console.log('中序遍历');
binaryTree.inOrderTraversal(binaryTree.root);

console.log('后序遍历');
binaryTree.postOrderTraversal(binaryTree.root);

输出结果为:

前序遍历
5
3
1
4
8
中序遍历
1
3
4
5
8
后序遍历
1
4
3
8
5

示例二

下面给定了一棵二叉树:

      10
     /  \
    5    20
   /    /  \
  2    15   30

同样地,我们可以通过上面的代码来建立这棵二叉树,并进行前、中、后序遍历。

let binaryTree = new BinaryTree();

binaryTree.insert(10);
binaryTree.insert(5);
binaryTree.insert(20);
binaryTree.insert(2);
binaryTree.insert(15);
binaryTree.insert(30);

console.log('前序遍历');
binaryTree.preOrderTraversal(binaryTree.root);

console.log('中序遍历');
binaryTree.inOrderTraversal(binaryTree.root);

console.log('后序遍历');
binaryTree.postOrderTraversal(binaryTree.root);

输出结果为:

前序遍历
10
5
2
20
15
30
中序遍历
2
5
10
15
20
30
后序遍历
2
5
15
30
20
10

至此,我们就成功地实现了二叉树的基础操作。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:JS二叉树的简单实现方法示例 - Python技术站

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

相关文章

  • 浅谈JavaScript的计时器对象

    浅谈JavaScript的计时器对象 在JavaScript中,计时器对象是一种十分实用的工具,它可以让我们控制代码的执行时间、更新动态显示效果、制作动画等等。本文将对JavaScript的计时器对象做一个简单的介绍和说明。 定时器的种类 在JavaScript中,定时器分为两种:Interval 和 Timeout。两者的作用是可以做指定的操作,不同之处在…

    JavaScript 2023年5月27日
    00
  • cypress中丰富的调试工具使用方法

    Cypress是一个开源的前端自动化测试框架,其提供了丰富的调试工具。本文将详细讲解Cypress中这些调试工具的使用方法。 1. 使用Chrome开发者工具 Cypress默认使用Chrome来运行测试,因此我们可以直接使用Chrome开发者工具来调试测试代码。在测试代码中添加断点,运行测试时会进入断点处,从而方便我们调试代码。 示例: describe(…

    JavaScript 2023年6月11日
    00
  • javaScript中封装的各种写法示例(推荐)

    JavaScript中封装的各种写法示例,可以用于将代码进行模块化,提高代码复用性和可维护性。以下是常用的封装写法及示例说明: 函数封装 在JavaScript中,最常用的封装方式就是使用函数进行封装。函数封装可以将一段功能代码封装成一个具有独立作用的函数,以便多次调用、重复使用。下面是一个简单的加减乘除的函数封装示例: // 定义一个加减乘除的函数计算器 …

    JavaScript 2023年6月10日
    00
  • JavaScript Dom对象的操作

    JavaScript DOM(文档对象模型)是一种使用JavaScript进行web页面编程的基本方式。它提供了API(应用程序接口),用于操作HTML和XML文档。在JavaScript中,DOM是一个对象层次结构,允许开发人员轻松地对HTML标记进行操作和访问。下面是JavaScript Dom对象的基本操作攻略: 获取元素 通过ID获取元素 javas…

    JavaScript 2023年5月27日
    00
  • Javascript 基础—Ajax入门必看

    Javascript 基础—Ajax入门必看 在前端开发中,Ajax技术是非常重要的一种技术,它可以实现网页异步请求数据,使网页看起来更流畅,用户体验更好。本文将为大家介绍Ajax的基础知识和简单应用,帮助初学者了解Ajax的原理和用法。 什么是Ajax? Ajax(Asynchronous JavaScript and XML)指的是一种网页异步请求数…

    JavaScript 2023年6月10日
    00
  • Java 正则表达式学习总结和一些小例子

    Java 正则表达式学习总结和一些小例子 正则表达式是用于字符串匹配和替换的一种表达式语言。Java 中使用 java.util.regex 包来实现正则表达式。这篇文章将会总结 Java 正则表达式的常见语法和使用方法,并且提供一些示例代码来说明这些概念。 Java 正则表达式语法 Java 正则表达式的语法相对复杂,但它也为我们提供了强大的功能和灵活性。…

    JavaScript 2023年6月10日
    00
  • 通过Javascript读取本地Excel文件内容的代码示例

    要通过Javascript读取本地Excel文件内容,我们可以使用以下步骤: 创建一个input元素,设置它的type属性为file,并将它添加到HTML页面中。 当用户选择Excel文件后,我们可以通过Javascript获取到该文件,可以使用FileReader对象将文件读取为二进制数据。 将二进制数据转换为Uint8Array类型的数组,并使用XLSX…

    JavaScript 2023年5月27日
    00
  • 代码生成器 document.write()

    代码生成器 document.write() 是一种 JavaScript 方法,可以在 HTML 文档中动态生成内容。在本文中,将详细讲解使用 document.write() 方法来生成 HTML 代码的完整攻略。 使用 document.write() 语法 document.write(HTMLcode) 参数 HTMLcode : 必需。要写入 H…

    JavaScript 2023年5月28日
    00
合作推广
合作推广
分享本页
返回顶部