-2

二分探索木全体を削除する最も効率的な方法を知りたいです。また、メモリリークを起こさないようにするため、最初にサブツリー内のすべてのノードが削除されているかどうかを確認する必要があります。

注文後のトラバーサル、削除する以外に効率的な方法は考えられません。提案やアイデアはありますか?

4

2 に答える 2

3

ルートノードを として設定するだけnullです。ガベージ コレクターにその仕事をさせます。

于 2012-10-12T06:03:01.940 に答える
1

バイナリ ツリー スレッドからすべての葉を削除すると、バイナリ ツリーのすべての子を削除することについて説明します。

public static void deleteLeaves(BSTNode root) {  
  if (root == null)  
    return;  

  if (root.left != null && isLeaf(root.left))  
    root.left = null;  
  else  
    deleteLeaves(root.left);  

  if (root.right != null && isLeaf(root.right))  
    root.right = null;  
  else  
    deleteLeaves(root.right);  
}  

nullルート ノードを設定し、ガベージ コレクターにジョブを実行させる最も簡単な方法は、上記のケースO(1)ではなくO(n)..

于 2012-10-12T06:08:59.440 に答える