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;