推荐答案
// www.javascriptcn.com code example
class TreeNode {
constructor(value) {
this.value = value;
this.left = null;
this.right = null;
}
}
class BinaryTree {
constructor() {
this.root = null;
}
insert(value) {
const newNode = new TreeNode(value);
if (this.root === null) {
this.root = newNode;
} else {
this.insertNode(this.root, newNode);
}
}
insertNode(node, newNode) {
if (newNode.value < node.value) {
if (node.left === null) {
node.left = newNode;
} else {
this.insertNode(node.left, newNode);
}
} else {
if (node.right === null) {
node.right = newNode;
} else {
this.insertNode(node.right, newNode);
}
}
}
search(value) {
return this.searchNode(this.root, value);
}
searchNode(node, value) {
if (node === null) {
return false;
}
if (value < node.value) {
return this.searchNode(node.left, value);
} else if (value > node.value) {
return this.searchNode(node.right, value);
} else {
return true;
}
}
inOrderTraversal(callback) {
this.inOrderTraversalNode(this.root, callback);
}
inOrderTraversalNode(node, callback) {
if (node !== null) {
this.inOrderTraversalNode(node.left, callback);
callback(node.value);
this.inOrderTraversalNode(node.right, callback);
}
}
}本题详细解读
1. TreeNode 类
TreeNode 类表示二叉树的节点。每个节点包含一个 value 属性,用于存储节点的值,以及 left 和 right 属性,分别指向左子节点和右子节点。
2. BinaryTree 类
BinaryTree 类表示二叉树本身。它包含一个 root 属性,用于指向树的根节点。
2.1 insert 方法
insert 方法用于向二叉树中插入一个新节点。如果树为空(即 root 为 null),则将新节点设置为根节点。否则,调用 insertNode 方法递归地将新节点插入到正确的位置。
2.2 insertNode 方法
insertNode 方法是一个递归方法,用于将新节点插入到树中的正确位置。如果新节点的值小于当前节点的值,则将其插入到左子树中;否则,插入到右子树中。
2.3 search 方法
search 方法用于在二叉树中查找一个值。它调用 searchNode 方法递归地在树中查找目标值。
2.4 searchNode 方法
searchNode 方法是一个递归方法,用于在树中查找目标值。如果当前节点为 null,则返回 false。如果目标值小于当前节点的值,则在左子树中继续查找;如果目标值大于当前节点的值,则在右子树中继续查找;如果目标值等于当前节点的值,则返回 true。
2.5 inOrderTraversal 方法
inOrderTraversal 方法用于执行中序遍历。它调用 inOrderTraversalNode 方法递归地遍历树中的每个节点,并对每个节点的值执行回调函数。
2.6 inOrderTraversalNode 方法
inOrderTraversalNode 方法是一个递归方法,用于执行中序遍历。它首先遍历左子树,然后处理当前节点,最后遍历右子树。