//中序时应该打出来的是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:... } }
左子树最大 和 右子树最小都是可以的。
因为要替换的当前节点必须比其所有左子树的节点值要大,同时还要比其右子数所有节点值要小,所以只能找右子数的最小节点。
不赋值给root的话,如果删除的是根节点,新树就不会替换旧树
这里的root代表的不只是一个节点, 而是整个二叉树(通过左右子节点的扩展), 对root赋值是将原二叉树指定节点移除后新的二叉树赋值给root.
让该节点的值等于右子树的最小节点的值,删除右子树中最小节点,和有没有左子树没关系
删除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)