バイナリ検索ツリーをリンクリストに変換しようとしています。リンクされたリストは、前面に小さい数字を、背面に大きな数字(最小から最大)を持つ必要があります。私は、バイナリ検索ツリーツリーを取り込んでリンクリストを出力する関数を作成する必要があります。バイナリ検索ツリーをリンクリストに変換する
4
/ \
2 6
/\ /\
1 3 5 7
私のバイナリ検索ツリーです。私は、リンクリストをこの方法で行う必要があります。
node<int>* makeLinkedList(binary_tree_node<int>* root_ptr);
int main()
{
binary_tree_node<int> *s1 = sample1(); //Creates the tree
node<int>* node1 = makeLinkedList(s1); //invokes function to make a linked list
//Loop to print out the values of the linked list
for (node1; node1 != NULL; node1 = node1->link()){
cout<<node1->data()<<endl;
}
}
node<int>* makeLinkedList(binary_tree_node<int>* root_ptr){
node<int>* left;
if (root_ptr == NULL) {
return NULL;
}
else{
left = makeLinkedList(root_ptr->left());
list_head_insert(left, root_ptr->data()); //list_head_insert inserts a new entry at the head of the linked list
return left;
}
}
私は私のコードを実行すると、出力は4、2、1:1、2、3、4、5、6、7は、ここに私の現在のコードです私はこのバイナリ検索ツリーをどのようにリンクリストに変換できるのか分かりません。私は再帰呼び出しの上にlist_head_insert関数を置いてみましたが、出力は何もなく、リストは空です。
私は、トラバーサルとその内容を印刷する方法を理解しています。私はそれらのノードの内容をリンクリストにどのように挿入できるのか分かりません。 – user2896120
これはかなり簡単です。上記の方法を使用して、いくつかの変更を加えて、リストに要素を追加することができます。この再帰的な方法で要素を取得した後、要素をリストに挿入するのに役立つ関数を呼び出します。追加のヒントとして、いつあなたは実際にツリーから要素を得ることになりますか?あなたはtがnullになるまで本当に行く必要がありますか?いつあなたは止めることができますか? – SenselessCoder
'makeLinkedList(root_ptr-> left()); \t \t list_head_insert(list2、root_ptr-> data()); \t \t makeLinkedList(root_ptr-> right()); \t \t \t \t return list2; 'これは私が今持っているものですが、プログラムはコンパイルされますが、何らかの問題のために終了します。これはあなたが話していることですか? – user2896120