二叉算法主要步骤
1. 创建二叉树节点类
首先需要定义一个节点类,包含节点值、左子节点、右子节点等属性。一个简单的实现如下:
class TreeNode {
constructor(val) {
this.val = val;
this.left = null;
this.right = null;
}
}
2. 创建二叉树
接下来需要创建一个二叉树类,实现二叉树的插入、遍历等操作。其中插入方法需要判断当前节点值和插入值的大小关系,选择向左或向右子树插入。
class BinaryTree {
constructor() {
this.root = null;
}
insert(val) {
const newNode = new TreeNode(val);
if (!this.root) {
this.root = newNode;
return;
}
let current = this.root;
while (current) {
if (val < current.val) {
if (current.left) {
current = current.left;
} else {
current.left = newNode;
break;
}
} else {
if (current.right) {
current = current.right;
} else {
current.right = newNode;
break;
}
}
}
}
// 前序遍历
preOrderTraversal(node = this.root, result = []) {
if (node) {
result.push(node.val);
this.preOrderTraversal(node.left, result);
this.preOrderTraversal(node.right, result);
}
return result;
}
// 中序遍历
inOrderTraversal(node = this.root, result = []) {
if (node) {
this.inOrderTraversal(node.left, result);
result.push(node.val);
this.inOrderTraversal(node.right, result);
}
return result;
}
// 后序遍历
postOrderTraversal(node = this.root, result = []) {
if (node) {
this.postOrderTraversal(node.left, result);
this.postOrderTraversal(node.right, result);
result.push(node.val);
}
return result;
}
}
3. 测试代码
最后可以写一些测试代码来验证实现的正确性,例如:
const binaryTree = new BinaryTree();
binaryTree.insert(8);
binaryTree.insert(3);
binaryTree.insert(10);
binaryTree.insert(1);
binaryTree.insert(6);
binaryTree.insert(14);
console.log(binaryTree.preOrderTraversal()); // [8, 3, 1, 6, 10, 14]
console.log(binaryTree.inOrderTraversal()); // [1, 3, 6, 8, 10, 14]
console.log(binaryTree.postOrderTraversal()); // [1, 6, 3, 14, 10, 8]
这里以前序、中序和后序遍历为例进行了测试,结果符合预期。