这是一个使用 JavaScript 实现二叉树的基本结构和操作的示例。

二叉树的基本结构

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

这里定义了一个 Node 类,每个节点包含一个值 (value) 和指向左右子树的指针 (leftright)。如果指针为空,则表示该节点没有左右子树。

创建二叉树

const root = new Node(1);
root.left = new Node(2);
root.right = new Node(3);
root.left.left = new Node(4);
root.left.right = new Node(5);

这里创建了一个包含 5 个节点的二叉树,根节点的值为 1,左子树包含节点 2 和 4,右子树包含节点 3 和 5。

遍历二叉树

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

inorderTraversal(root);  // 4 2 5 1 3

这里定义了一个中序遍历函数 inorderTraversal,它会先递归遍历左子树,再输出当前节点的值,最后递归遍历右子树。运行该函数会输出节点值的中序遍历。

插入节点

function insert(root, value) {
  if (!root) {
    return new Node(value);
  }
  if (value < root.value) {
    root.left = insert(root.left, value);
  } else if (value > root.value) {
    root.right = insert(root.right, value);
  }
  return root;
}

insert(root, 6);
inorderTraversal(root);  // 4 2 5 1 3 6

这里定义了一个插入节点函数 insert,它会根据节点值的大小比较递归地插入节点。运行该函数会将值为 6 的节点插入到二叉树中,并输出更新后的中序遍历。

删除节点

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 && !root.right) {
      return null;
    } else if (!root.left || !root.right) {
      return root.left || root.right;
    } else {
      let minNode = root.right;
      while (minNode.left) {
        minNode = minNode.left;
      }
      root.value = minNode.value;
      root.right = deleteNode(root.right, minNode.value);
    }
  }
  return root;
}

deleteNode(root, 2);
inorderTraversal(root);  // 4 5 1 3 6

这里定义了一个删除节点函数 deleteNode,它会根据节点值的大小比较递归地删除节点。如果节点没有左右子树,则直接删除该节点。如果节点只有一个子树,则用该子树替换当前节点。如果节点有两个子树,则找到右子树中的最小节点,用该节点替换当前节点,并递归删除该最小节点。运行该函数会将值为 2 的节点从二叉树中删除,并输出更新后的中序遍历。

希望这些例子能够帮助您理解如何使用 JavaScript 创建和操作二叉树。

JavaScript 二叉树实现:创建、遍历、插入和删除

原文地址: https://www.cveoy.top/t/topic/mhva 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录