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

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日

相关文章

  • 微信小程序+腾讯地图开发实现路径规划绘制

    下面我将详细讲解“微信小程序+腾讯地图开发实现路径规划绘制”的完整攻略。 前提准备 在开始之前,需要完成以下几个步骤: 申请腾讯地图开发者账号,并获取开发者密钥 创建微信小程序项目,并在项目中引入腾讯地图SDK 实现步骤 1. 获取用户位置 在前往目的地前,需要获取用户的当前位置。可以通过微信小程序的 wx.getLocation 接口获取用户当前的经纬度信…

    JavaScript 2023年6月11日
    00
  • PHP Cookie学习笔记

    下面我来详细讲解“PHP Cookie学习笔记”的完整攻略。 一、什么是Cookie Cookie即浏览器的“小甜饼”,是一种存储在客户端的短文本数据。通过Cookie,Web应用程序能够在客户端存储和检索数据,从而实现用户状态的跟踪和数据交换。在PHP中,通过setcookie()函数可以创建、修改或删除Cookie。 二、如何使用Cookie 1.创建C…

    JavaScript 2023年6月11日
    00
  • 浅谈Javascript嵌套函数及闭包

    浅谈Javascript嵌套函数及闭包 Javascript中的嵌套函数和闭包是一些高级概念,但对于深入理解Javascript这门语言来说是必不可少的。在这篇文章中,我们将探讨Javascript中嵌套函数和闭包的概念、特点以及如何使用它们。 嵌套函数 嵌套函数,就是在一个函数体中定义另一个函数。在Javascript中,函数是一等公民,也就是说函数可以作…

    JavaScript 2023年6月10日
    00
  • 详解操作cookie的原生方法cookieStore

    下面是详解操作cookie的原生方法cookieStore的完整攻略。 一、什么是cookieStore cookieStore 是浏览器 JavaScript 运行时的一个 API,用来管理浏览器中所有的 cookie,可用于对 cookie 实现增删改查等操作。 二、cookieStore的基本使用方法 cookieStore API 可以使用在浏览器中…

    JavaScript 2023年6月11日
    00
  • 转换json格式的日期为Javascript对象的函数

    转换JSON格式的日期为Javascript对象的函数一般使用JSON.parse()函数实现。在JSON字符串中,日期被表示为字符串并以ISO 8601日期格式给出,如下所示: "2021-09-13T08:57:23Z" 要将此日期转换为Javascript对象,可以按照以下步骤进行操作: 1.创建一个JSON字符串,包含一个带有日期…

    JavaScript 2023年5月27日
    00
  • java 最新Xss攻击与防护(全方位360°详解)

    Java 最新Xss攻击与防护(全方位360°详解)攻略 什么是XSS攻击 XSS攻击是指攻击者向有漏洞的Web页面中插入恶意的代码(比如脚本),当用户浏览该页面时,攻击代码会被执行,从而实现攻击者想要的攻击目的。 XSS攻击的类型 XSS攻击的类型可以分为以下几类: 反射型XSS:注入的脚本在请求URL参数中,并将脚本注入到返回的响应中,被用户浏览器解析执…

    JavaScript 2023年6月11日
    00
  • 在JavaScript中通过URL传递汉字的方法

    在JavaScript中,我们可以通过URL传递参数,包括传递汉字参数。以下是详细的方法攻略: 第一步:使用encodeURIComponent()方法 在传递参数中包含汉字时,需要使用JavaScript提供的encodeURIComponent()方法对参数进行编码。该方法会把所有非字母数字字符(如汉字)都转换为URL编码,以便能够正确传递。 例如,如果…

    JavaScript 2023年5月19日
    00
  • javascript的hashCode函数实现代码小结

    为了讲解JavaScript的hashCode函数实现代码小结,让我先来介绍一下什么是hashCode。 HashCode是一种数据结构,它用于将一些复杂的数据结构简化为一些简单的数据类型,通常是数字或字符串。HashCode算法将数据结构转换为一个整数,使其更容易存储或比较。在JavaScript中,我们通常使用字符串作为HashCode的生成器。生成的H…

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