我有一个关于从二叉搜索树函数中删除部分的问题。
switch (childCount){
case 0: // It has no children then remove parent
if(current.value < parent.value){
parent.left = null;
} else{
parent.right = null;
}
break;
case 1: //it has 1 children, reassign to parent
if(current.value < parent.value){
parent.left = (current.left === null ? current.right : curent.left);
} else {
parent.right = (current.left === null ? current.right : current.left);
}
break;
我并不真正理解案例1,以及parent.left和parent.right的值。 (current.left === null?current.right:curent.left)究竟是什么意思? 语法让我失望。 我知道它指的是如果它有一个孩子,只需重新分配给父母。但我仍然感到困惑
谢谢,
答案 0 :(得分:2)
parent.left = (current.left === null ? current.right : curent.left);
装置
if (current.left === null)
parent.left = current.right;
else
parent.left = curent.left;
查看详细信息:Wikipedia - ternary operator
答案 1 :(得分:1)
所以基本上这只是说如果当前节点(我们试图删除的节点)有一个且只有一个孩子,我们必须将子流分配给父母的孩子,所以我们不会丢失孩子那个树。正如莫勒所说,任务是三元运算符,所以如果测试
parent.left = (current.left === null ? current.right : curent.left);
计算为true parent.left设置为current.right,否则设置为current.left。
所有这些检查都是为了维护二元搜索树的属性,其中左边的孩子是&lt; =父母,而右边的孩子是&gt;比父母。