将二叉搜索树转换为链接列表

时间:2016-11-16 00:28:31

标签: c++ recursion binary-tree binary-search-tree

我正在尝试将二叉搜索树转换为链接列表。链表应该在前面有较小的数字,在后面有较大的数字(从最小到最大)。我需要创建一个接收二叉搜索树树并输出链表的函数。

        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函数放在递归调用之上,但输出是空的,列表为空。

1 个答案:

答案 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);
}