慕姐1218095
//中序时应该打出来的是node的key 本来是应该打出4 的却把整个node打印出来了.
//说明在最后一个(node.left && node.right)同时存在判断中 赋值出现错误
//本应该是
let aux = findMinNode(node.right);
node.key = aux.key;
...
// 写成了
let aux = findMinNode(node.right);
node = aux.key;
...
//因为本身Object是引用类型数据. 所以node(4) 的left right就都是null
{
key:8
left:{
key: { //错误位置 ,本来应该是Number(4), 现在变成Node(4)了
key:4,
left:...,
right:...
},
left:...,
right:...
}
right:{
key:10,
left:...,
right:...
}
}
慕设计1980359
毒丶
左子树最大 和 右子树最小都是可以的。
毒丶
因为要替换的当前节点必须比其所有左子树的节点值要大,同时还要比其右子数所有节点值要小,所以只能找右子数的最小节点。
xiaomizhou66
不赋值给root的话,如果删除的是根节点,新树就不会替换旧树
安梓静
这里的root代表的不只是一个节点, 而是整个二叉树(通过左右子节点的扩展), 对root赋值是将原二叉树指定节点移除后新的二叉树赋值给root.
孙金科4053749
让该节点的值等于右子树的最小节点的值,删除右子树中最小节点,和有没有左子树没关系
杨开大大
删除6的话,4成为3右字树,7成为4的右字树。
程序员熊明才
var findMinNode = function (node) { if (node) {
while (node === null && node.left !== null) {
}
return node;
}
return null
};你的findMinNode()函数里面出错了,循环条件应该是while(node && node.left !== null)