如何创建一个非搜索二叉树

299 阅读2分钟

想要创建一个二叉树,规则是输入一个数组如下:

const list = [5, 2, 3, 1, 4, 6];

得到如下二叉树:

但是找遍所有文章也找不到如何实现,大部分创建二叉树的实现都是在创建一个有序的二叉树(搜索二叉树)如下图

到底如何创建一个图一中的普通的二叉树呢?!!

一下答案来自kimi:

在JavaScript中创建一个二叉树,首先需要定义一个二叉树节点(TreeNode)的数据结构,然后根据提供的列表来构建这棵树。列表中的每个元素将作为树的节点值,但是列表的顺序并不直接决定树的结构。通常,二叉树的构建需要一个特定的规则,比如按层次顺序构建(即列表中的元素顺序对应树的层次遍历顺序)。

下面是一个简单的例子,展示如何使用JavaScript创建一个二叉树:


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

function createBinaryTree(list) {
  if (list.length === 0) return null;

  // 创建树的根节点
  const root = new TreeNode(list[0]);

  // 队列用于按层次构建二叉树
  const queue = [root];

  // 从第二个元素开始构建树
  for (let i = 1; i < list.length; i++) {
    const current = queue.shift(); // 取出队列的第一个元素作为当前节点

    // 创建当前节点的左子节点
    current.left = i < list.length ? new TreeNode(list[i++]) : null;
    if (current.left) queue.push(current.left);

    // 创建当前节点的右子节点
    current.right = i < list.length ? new TreeNode(list[i]) : null;
    if (current.right) queue.push(current.right);
  }

  return root;
}

// 示例列表
const list = [5, 2, 3, 1, 4, 6];
const binaryTree = createBinaryTree(list);

// 打印二叉树
function printTree(node, level = 0) {
  if (node !== null) {
    printTree(node.right, level + 1);
    console.log('  '.repeat(level) + '->', node.value);
    printTree(node.left, level + 1);
  }
}

printTree(binaryTree);

请注意,这个例子中创建的二叉树是不平衡的,因为列表的顺序被直接用来构建二叉树的层次结构。在实际应用中,你可能需要根据特定的规则来构建二叉树,比如按照二叉搜索树(BST)的规则,或者使用特定的算法来平衡树的结构。