的JavaScript实现:二叉树的遍历算法,包括先序遍历、中序遍历和后序遍历
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<script>
// 定义二叉树节点类
class Node {
constructor(value) {
this.value = value;
this.left = null;
this.right = null;
}
}
// 定义二叉树类
class BinaryTree {
constructor() {
this.root = null;
}
// 插入节点
insert(value) {
let newNode = new Node(value);
if (!this.root) {
this.root = newNode;
} else {
this._insertNode(this.root, newNode);
}
}
_insertNode(node, newNode) {
if (newNode.value < node.value) {
if (!node.left) {
node.left = newNode;
} else {
this._insertNode(node.left, newNode);
}
} else {
if (!node.right) {
node.right = newNode;
} else {
this._insertNode(node.right, newNode);
}
}
}
// 先序遍历
preOrderTraversal(callback) {
this._preOrderTraversalNode(this.root, callback);
}
_preOrderTraversalNode(node, callback) {
if (node) {
callback(node.value);
this._preOrderTraversalNode(node.left, callback);
this._preOrderTraversalNode(node.right, callback);
}
}
// 中序遍历
inOrderTraversal(callback) {
this._inOrderTraversalNode(this.root, callback);
}
_inOrderTraversalNode(node, callback) {
if (node) {
this._inOrderTraversalNode(node.left, callback);
callback(node.value);
this._inOrderTraversalNode(node.right, callback);
}
}
// 后序遍历
postOrderTraversal(callback) {
this._postOrderTraversalNode(this.root, callback);
}
_postOrderTraversalNode(node, callback) {
if (node) {
this._postOrderTraversalNode(node.left, callback);
this._postOrderTraversalNode(node.right, callback);
callback(node.value);
}
}
}
// 示例代码
let tree = new BinaryTree();
tree.insert(4);
tree.insert(2);
tree.insert(1);
tree.insert(3);
tree.insert(6);
tree.insert(5);
tree.insert(7);
console.log('先序遍历结果:');
tree.preOrderTraversal(console.log);
console.log('中序遍历结果:');
tree.inOrderTraversal(console.log);
console.log('后序遍历结果:');
tree.postOrderTraversal(console.log);
</script>
</body>
</html>
定义了一个Node类和一个BinaryTree类。其中Node类表示二叉树的节点,包含一个值value和左右子节点left和right。BinaryTree类表示整个二叉树,包含一个根节点root和插入节点和遍历节点的方法。插入节点的方法_insertNode采用递归的方式,先序遍历、中序遍历和后序遍历的方法_preOrderTraversalNode、_inOrderTraversalNode和_postOrderTraversalNode也都采用递归的方式实现。最后的示例代码创建了一个二叉树,并对其进行了先序遍历、中序遍历和后序遍历,并将结果打印出