Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/125.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 将二叉搜索树转换为链表_C++_Recursion_Binary Tree_Binary Search Tree - Fatal编程技术网

C++ 将二叉搜索树转换为链表

C++ 将二叉搜索树转换为链表,c++,recursion,binary-tree,binary-search-tree,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>* r

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

        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;
    }
}
node*makeLinkedList(二叉树节点*root\ptr);
int main()
{
二叉树节点*s1=sample1();//创建树
node*node1=makeLinkedList(s1);//调用函数生成链表
//循环以打印出链接列表的值
for(node1;node1!=NULL;node1=node1->link()){

cout因此,换句话说,您希望在链接列表中以排序形式显示此内容

有一种遍历方法:按顺序遍历。请参阅 有关遍历的详细信息

那么如何做到这一点呢?作为一个提示,我将给你一个函数,按顺序“打印”这个BST的内容。这应该会让你开始工作。(在弄清楚如何按顺序获取树的内容之后,你所要做的就是调用一个插入函数到列表中)

按顺序作废打印(节点*t){
如果(!t)
返回;
按顺序打印(t->左);
cout数据;
按顺序打印(t->右);
}

我了解顺序遍历以及如何打印树的内容,但我不知道如何将这些节点的内容插入到链接列表中。这非常简单。使用上面的方法,只需稍作修改,就可以将元素添加到列表中。在以这种递归方式获取元素后,只需调用函数这将有助于在列表中插入一个元素。作为一个额外的提示,你实际上什么时候才能从树中获得一个元素?你真的必须一直到t为null吗?你什么时候才能停止?
makeLinkedList(root\u ptr->left());list\u head\u insert(list2,root\u ptr->data());makeLinkedList(root\u ptr->right());return list2;
这就是我现在所拥有的,程序可以编译,但是由于一些问题它退出了。这就是你说要做的吗?是的,应该可以。确保检查接收到的指针是否为null。我有一个基本case语句,它检查指针是否为null,如下所示:
if(root_ptr==null){return NULL;}
这就是你的意思吗?
void print_in_order(Node* t) {
    if(!t)
        return;
    print_in_order(t->left);
    cout << t->data;
    print_in_order(t->right);
}