二进制搜索树分配给父级

时间:2016-06-23 15:15:41

标签: 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: //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)究竟是什么意思? 语法让我失望。 我知道它指的是如果它有一个孩子,只需重新分配给父母。但我仍然感到困惑

谢谢,

2 个答案:

答案 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;比父母。