想要创建一个二叉树,规则是输入一个数组如下:
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)的规则,或者使用特定的算法来平衡树的结构。