Javascript 分配给父级的二叉搜索树

Javascript 分配给父级的二叉搜索树,javascript,binary-search-tree,Javascript,Binary Search Tree,我有一个关于从二元搜索树函数中删除部分的问题 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:

我有一个关于从二元搜索树函数中删除部分的问题

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;
开关(儿童计数){
案例0://它没有子项,然后删除父项
if(当前值<父值){
parent.left=null;
}否则{
parent.right=null;
}
打破
案例1://它有1个子项,重新分配给父项
if(当前值<父值){
parent.left=(current.left==null?current.right:curent.left);
}否则{
parent.right=(current.left==null?current.right:current.left);
}  
打破
我不太理解案例1,以及parent.left和parent.right的值。 (current.left==null?current.right:curent.left)的确切含义是什么? 语法让我很反感。 我知道它指的是一个案例,如果它有一个孩子,就重新分配给父母。但我仍然感到困惑

谢谢

parent.left = (current.left === null ? current.right : curent.left);
意味着

有关详细信息,请参见:

意味着


请参阅以获取详细信息:

因此,基本上这只是说,如果当前节点(我们试图删除的节点)有一个且只有一个子节点,我们必须将当前子节点指定为父节点的子节点,这样我们就不会从树中丢失子节点。正如moller所说,这些指定是三元运算符,因此如果测试

parent.left=(current.left==null?current.right:curent.left);

计算结果为true parent.left设置为current.right,否则设置为current.left


所有这些检查都是为了维护二元搜索树的属性,其中留下的子节点比父节点多。

因此,基本上这只是说如果当前节点(我们试图删除的节点)有一个且只有一个孩子我们必须将当前的孩子指定为父的孩子,这样我们就不会从树中丢失孩子。正如moller所说,这些指定是三元运算符,因此如果测试

parent.left=(current.left==null?current.right:curent.left);

计算结果为true parent.left设置为current.right,否则设置为current.left


所有这些检查都是为了维护一个二元搜索树的属性,在这个二元搜索树中,留下的子项比父项多。

请参见“谢谢,这很有意义!谢谢,这很有意义!”!
if (current.left === null)
    parent.left = current.right;
else
    parent.left = curent.left;