> 文章列表 > JavaScript实现:二叉树的遍历算法,包括先序遍历、中序遍历和后序遍历

JavaScript实现:二叉树的遍历算法,包括先序遍历、中序遍历和后序遍历

JavaScript实现:二叉树的遍历算法,包括先序遍历、中序遍历和后序遍历

的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也都采用递归的方式实现。最后的示例代码创建了一个二叉树,并对其进行了先序遍历、中序遍历和后序遍历,并将结果打印出