2

ルートを除くプレフィックス ツリーのすべての子を削除する必要があります。私はコードを求めていません。ツリーのすべての子をトラバースして削除するメソッドが必要なだけです。

4

3 に答える 3

1

次のように、ポスト オーダー トラバーサルを使用してツリーをトラバースし、ノードを削除できます。

function deleteTree(node, tree_root) {
     if (node != null) {
         // recursively delete left sub-tree.
         deleteTree(node->left, tree_root);

         // recursively delete right sub-tree.
         deleteTree(node->right, tree_root);

         // time to delete the node..but only if it's not root.
         if( node != tree_root) {
              delete node;
         }  
     }
}

上記の関数を次のように呼び出します。

deleteTree(root,root);
于 2012-05-05T13:07:15.463 に答える
0

deleteツリー ノードを取るメソッドを記述します。

 for each child in node
   call delete on child
   remove child from node
   free child

root の子ごとに、この delete メソッドを呼び出します。

于 2012-05-05T13:05:08.133 に答える
0

興味深いことに、いくつかのエレガントなことを行うことができます-ツリーは削除後に使用されない可能性があるため、ノードのデストラクタを書くことができます:

struct Node // Non-copyable!
{
  Node *left, *right;

  Node()
    : left(NULL)
    , right(NULL)
  {
  }
  ~Node()
  {
    delete left;
    delete right;
  }
};

そしてそれだけです!あなたはそれを使用します:delete rootdeleteNULLは C++ 標準で適切に機能する (ただ返すだけ) ため、事前に NULL をテストしない場合があることに注意してください。

于 2012-05-05T13:23:39.007 に答える