当前位置:首页 > JavaScript

js实现二叉树

2026-04-03 19:38:51JavaScript

实现二叉树的基本结构

在JavaScript中,二叉树可以通过对象或类实现。每个节点包含值(value)、左子树(left)和右子树(right)属性。以下是一个简单的节点类定义:

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

构建二叉树实例

通过实例化节点并连接左右子树,可以手动构建二叉树:

// 创建节点
const root = new TreeNode(1);
root.left = new TreeNode(2);
root.right = new TreeNode(3);
root.left.left = new TreeNode(4);
root.left.right = new TreeNode(5);

二叉树的遍历方法

二叉树的遍历分为深度优先(DFS)和广度优先(BFS)。以下是常见实现方式:

1. 深度优先遍历(DFS)

  • 前序遍历(根 → 左 → 右):
    function preorderTraversal(node) {
      if (!node) return [];
      return [node.value, ...preorderTraversal(node.left), ...preorderTraversal(node.right)];
    }
  • 中序遍历(左 → 根 → 右):
    function inorderTraversal(node) {
      if (!node) return [];
      return [...inorderTraversal(node.left), node.value, ...inorderTraversal(node.right)];
    }
  • 后序遍历(左 → 右 → 根):
    function postorderTraversal(node) {
      if (!node) return [];
      return [...postorderTraversal(node.left), ...postorderTraversal(node.right), node.value];
    }

2. 广度优先遍历(BFS)
使用队列实现层级遍历:

function breadthFirstTraversal(root) {
  const result = [];
  const queue = [root];
  while (queue.length) {
    const node = queue.shift();
    result.push(node.value);
    if (node.left) queue.push(node.left);
    if (node.right) queue.push(node.right);
  }
  return result;
}

插入节点的方法

根据二叉搜索树(BST)规则(左子树值 < 根值 < 右子树值),插入逻辑如下:

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

  insert(value) {
    const newNode = new TreeNode(value);
    if (!this.root) {
      this.root = newNode;
      return;
    }
    let current = this.root;
    while (true) {
      if (value < current.value) {
        if (!current.left) {
          current.left = newNode;
          break;
        }
        current = current.left;
      } else {
        if (!current.right) {
          current.right = newNode;
          break;
        }
        current = current.right;
      }
    }
  }
}

查找节点

在BST中查找特定值:

js实现二叉树

function searchBST(root, value) {
  if (!root || root.value === value) return root;
  if (value < root.value) return searchBST(root.left, value);
  return searchBST(root.right, value);
}

注意事项

  • 普通二叉树的插入和查找需依赖具体业务逻辑,而BST有明确的规则。
  • 遍历时注意递归的终止条件(if (!node) return),避免无限循环。
  • 广度优先遍历使用队列而非递归,适合处理层级数据。

标签: 二叉树js
分享给朋友:

相关文章

jquery.js

jquery.js

jQuery 简介 jQuery 是一个快速、简洁的 JavaScript 库,用于简化 HTML 文档遍历、事件处理、动画设计和 Ajax 交互。它的设计宗旨是“Write Less, Do Mor…

jquery.js

jquery.js

jQuery 是一个快速、简洁的 JavaScript 库,简化了 HTML 文档遍历、事件处理、动画设计和 Ajax 交互等操作。以下是关于 jQuery.js 的核心信息和使用方法: 获…

js手势实现

js手势实现

手势识别实现方法 在JavaScript中实现手势识别通常涉及监听触摸事件(touchstart、touchmove、touchend)或鼠标事件(mousedown、mousemove、mouseu…

js实现求导

js实现求导

实现数值求导的方法 在JavaScript中实现求导通常采用数值方法,因为JavaScript不是符号计算语言。以下是常见的数值微分方法: 中心差分法 中心差分法提供较高精度的导数近似: func…

js实现授权

js实现授权

授权流程设计 授权流程通常涉及前端与后端的交互,常见方案包括OAuth2.0、JWT等。以JWT为例的典型流程: 用户提交凭证(如用户名密码)到认证服务 服务端验证通过后生成包含用户信息的JWT令牌…

js实现密码

js实现密码

密码强度验证 使用正则表达式验证密码强度是一种常见方法。以下代码检查密码是否包含大小写字母、数字和特殊字符,且长度至少为8位: function checkPasswordStrength(pass…