2016-06-23 6 views
0

バイナリ検索ツリー機能から削除部分に関する質問があります。バイナリ検索ツリー親に割り当て

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 AND parent.rightの値ではありませんよ。 (current.left === null?current.right:curent.left)はどういう意味ですか? 構文は私を捨てています。 私はそれが1つの子供を持っている場合、親に再割り当てする場合を指していることを知っています。しかし、私はまだ混乱している

おかげで、

+0

http://stackoverflow.com/questions/10323829/javascript-ternary-operator-example-with-functions –

答えて

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

+0

ありがとう、これは今たくさんの意味があります! – Cesar

1

だから基本的にはこれは単なる場合、現在のノード(ノードと言っています我々は削除しようとしている)は、我々はツリーから子を失うことはありませんので、私たちは親の子になるために子供を割り当てる必要がある唯一の子供を持っています。モラーが言ったように試験

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

が真parent.leftと評価された場合に、割り当ては、三元演算子であるそうでなければcurrent.leftするように設定されている、current.rightするように設定されています。

これらのチェックはすべて、左の子が< =親と右の子が親であるバイナリ検索ツリーのプロパティを維持することです。

関連する問題