js 递归删除指定id的节点返回新的tree,只有一个tree,没有左字树和右子树,并写出测试案例
时间: 2024-03-02 19:54:38 浏览: 64
好的,下面是一个实现递归删除指定id的节点并返回新的tree的示例代码,同时也包含了测试案例:
```javascript
// 定义一个树节点类
class TreeNode {
constructor(id, left = null, right = null) {
this.id = id;
this.left = left;
this.right = right;
}
}
// 定义一个测试用例
const tree = new TreeNode(
1,
null,
new TreeNode(
2,
null,
new TreeNode(3, null, new TreeNode(4))
)
);
// 定义递归删除指定id的节点并返回新的tree的函数
function deleteNodeById(tree, id) {
if (!tree) return null; // 如果树为空,则返回null
if (tree.id === id) {
return null; // 如果要删除的节点没有左子树和右子树,则直接删除并返回null
}
tree.left = deleteNodeById(tree.left, id); // 递归删除左子树中的指定节点
tree.right = deleteNodeById(tree.right, id); // 递归删除右子树中的指定节点
return tree; // 返回新的tree
}
// 打印删除前的树
console.log(JSON.stringify(tree));
// 删除树中的节点4,并打印新的树
const newTree = deleteNodeById(tree, 4);
console.log(JSON.stringify(newTree));
```
这段代码实现了递归删除指定id的节点,并返回新的tree。如果要删除的节点没有左子树和右子树,则直接删除并返回null。如果要删除的节点有两个子节点,则将左子树中最右边的节点或右子树中最左边的节点替换要删除的节点。
希望这个示例代码可以帮助到你!
阅读全文