2016-03-23 5 views
0

stlリストの最初のノードをバイナリツリーノードに割り当てようとしています... 私が直面している問題は、stlにリストされている関数にツールが表示されないということです私がそれを可能にするために。例えばstlリストの最初のノードにアクセス

: 私は次のリストを作成した場合:

list<int> L; 
L.push_front(10); 
L.push_back(20); 
L.push_back(30); 
L.push_back(40); 
L.push_back(50); 
L.push_back(60); 
L.push_back(70); 

リストは次のようになります。10,20,30,40,50,60,70 ...

私の質問があります、新しいノード(特にバイナリツリーノードを使用している)をリストの最初のノードに割り当てる方法はありますか?リストをバイナリツリーに変換する関数に渡すために、整数値ではなくノード値が必要です。

これは明白な理由のために動作しませんでした:新しいにその最初のノードを割り当てる方法がある場合、それはノード値に整数を代入しようとしているよう

binary_tree_node<Item> *node = list.front(); 

が、私はちょうど興味がありましたノード。

今これは、したがって、このような何か::

class binary_tree_node<T> { 
    T classMember; 

    binary_tree_node(T &data) { 
     classMember = data; 
    } 
} 

、私はあなたがあなたのクラスbinary_tree_node<T>でコンストラクタを作る提案します、私は

template <class Item> 
binary_tree_node<Item>* convert(list<Item> &list, int start, int end) 
{ 
binary_tree_node<Item> *node = list.front(); 
if (start > end) return NULL; 
int mid = start + (end - start)/2; 
binary_tree_node<Item>* leftChild = convert(list, start, mid-1); 
binary_tree_node<Item>* parent = new binary_tree_node<Item> (node->data()); 
parent->left() = leftChild; 
node = node->next(); 
parent->right() = convert(list, mid+1, end); 
return parent; 
} 

template <class Item> 
binary_tree_node<Item>* convert(list<Item> &head, int n) 
{ 
return convert(head, 0, n-1); 
} 
+0

'binary_tree_node'とは何ですか?あなたのカスタムクラス? – Jarod42

+0

何をしようとしていますか?バイナリツリーを作成しますか?バイナリツリーノードで 'std :: list'を使いますか?ノードを入れるには 'std :: list'を使いますか? –

+0

このコースで使用する教科書の作成者が作成したカスタムテンプレートクラスの実装。 @ Jarod42 –

答えて

0

を使用しようとしています機能ですノードを構築するためにlistに格納されているItemの値を取得しています。このようなことができます。::

binary_tree_node<Item> *node = new binary_tree_node(list.front()); 

さらに、list.front()はリストの最初の要素だけを返します。次の再帰に入る前に削除したいと思いますので、リストの最初の要素が役に立たないときはlist.pop_front()を必ず呼び出してください!

関連する問題