我正在尝试将二叉搜索树转换为链接列表。链表应该在前面有较小的数字,在后面有较大的数字(从最小到最大)。我需要创建一个接收二叉搜索树树并输出链表的函数。
4
/ \
2 6
/ \ / \
1 3 5 7
这是我的二叉搜索树。我需要以这种方式制作链表:1,2,3,4,5,6,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。我只是不明白如何将这个二进制搜索树转换为从最小到最大的链表。我已经尝试将list_head_insert函数放在递归调用之上,但输出是空的,列表为空。
答案 0 :(得分:2)
因此换句话说,您希望在链接列表中以排序的形式进行此操作。
有一种遍历方式:按顺序遍历。见here 有关遍历的更多信息。
那么怎么做呢?作为一个提示,我将为您提供一个功能,以打印&#34;这个BST的内容是有序的。这应该让你滚动。 (在确定如何按顺序获取树的内容之后,您只需要在列表中调用插入函数)
void print_in_order(Node* t) {
if(!t)
return;
print_in_order(t->left);
cout << t->data;
print_in_order(t->right);
}