当前位置:首页 > JavaScript

js实现二叉树

2026-02-28 19:13:12JavaScript

实现二叉树的基本结构

在 JavaScript 中,二叉树可以通过对象或类实现。每个节点包含 valueleft(左子树)和 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);

二叉树的遍历

二叉树的常见遍历方式包括前序、中序和后序遍历,均可用递归实现。

前序遍历(根-左-右)

function preorderTraversal(node) {
  if (!node) return;
  console.log(node.value);
  preorderTraversal(node.left);
  preorderTraversal(node.right);
}

中序遍历(左-根-右)

js实现二叉树

function inorderTraversal(node) {
  if (!node) return;
  inorderTraversal(node.left);
  console.log(node.value);
  inorderTraversal(node.right);
}

后序遍历(左-右-根)

function postorderTraversal(node) {
  if (!node) return;
  postorderTraversal(node.left);
  postorderTraversal(node.right);
  console.log(node.value);
}

层序遍历(广度优先)

使用队列实现按层级遍历二叉树。

function levelOrderTraversal(root) {
  if (!root) return;
  const queue = [root];
  while (queue.length) {
    const node = queue.shift();
    console.log(node.value);
    if (node.left) queue.push(node.left);
    if (node.right) queue.push(node.right);
  }
}

插入节点

根据特定规则(如二叉搜索树的条件)插入新节点。

js实现二叉树

function insertBST(root, value) {
  if (!root) return new TreeNode(value);
  if (value < root.value) {
    root.left = insertBST(root.left, value);
  } else {
    root.right = insertBST(root.right, value);
  }
  return root;
}

查找节点

在二叉搜索树中查找特定值。

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);
}

删除节点

删除二叉搜索树中的节点,需处理三种情况:无子节点、有一个子节点、有两个子节点。

function deleteNode(root, value) {
  if (!root) return null;
  if (value < root.value) {
    root.left = deleteNode(root.left, value);
  } else if (value > root.value) {
    root.right = deleteNode(root.right, value);
  } else {
    if (!root.left) return root.right;
    if (!root.right) return root.left;
    const minNode = findMin(root.right);
    root.value = minNode.value;
    root.right = deleteNode(root.right, minNode.value);
  }
  return root;
}

function findMin(node) {
  while (node.left) node = node.left;
  return node;
}

二叉树的高度

计算二叉树的深度(高度)。

function getHeight(root) {
  if (!root) return 0;
  return Math.max(getHeight(root.left), getHeight(root.right)) + 1;
}

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

相关文章

js实现验证码

js实现验证码

实现验证码的JavaScript方法 生成随机验证码 使用Math.random()生成随机字符串,结合数字和字母: function generateCaptcha() { const cha…

vue.js实现轮播

vue.js实现轮播

Vue.js 实现轮播功能 使用第三方库(推荐) Vue.js 生态中有许多成熟的轮播组件库,例如 vue-awesome-swiper 或 swiper,它们功能丰富且易于集成。 安装 swip…

js实现分页

js实现分页

分页的基本实现思路 在JavaScript中实现分页功能通常需要结合前端和后端逻辑。前端负责渲染分页控件和处理用户交互,后端负责提供分页数据。 前端分页实现 纯前端分页适用于数据量较小的情况,可以…

js实现复制

js实现复制

使用document.execCommand方法 在较旧的浏览器中,可以使用document.execCommand('copy')实现复制功能。创建一个临时的textarea或input元素,将需要…

js防抖和节流实现

js防抖和节流实现

防抖(Debounce)的实现 防抖的核心思想是在事件被触发后,延迟执行回调函数。如果在延迟时间内再次触发事件,则重新计时。适用于输入框搜索、窗口大小调整等场景。 function debounc…

js实现vr

js实现vr

使用WebXR API实现VR体验 WebXR是浏览器中实现VR和AR体验的标准API,它取代了早期的WebVR。现代浏览器如Chrome、Edge和Firefox已支持WebXR。 // 初始化W…