视觉工作室的错误结果

wrong result in Visual Studio

本文关键字:结果 错误 工作室 视觉      更新时间:2023-10-16

我以前从未遇到过这种错误。当我在CodeBlock中编译时,我的代码工作正常,但是当我将代码复制到VS(2015社区)中时,它仅显示了两个数字。(我正在打印二进制树)

这是二进制搜索树的代码,并且在CodeBlocks中效果很好,但在Visual Studio

中效果不佳
#include<iostream>
using namespace std;
struct node
{
    int data;
    int balance_factor;
    node* left_linker;
    node* right_linker;
};
struct binary_tree
{
    node* root;
};
void init_tree(binary_tree& in_tree);
node* create_new_node(int data);
void insert_node(int in_data,binary_tree& in_tree);
node* insert_recursively(int in_data,node* in_root);
bool tree_empty(binary_tree& in_tree);
void print_tree_from_root(node* in_root);
int main(int argc,char* argv[])
{
    binary_tree tree_1;
    init_tree(tree_1);
    insert_node(10,tree_1);
    insert_node(30,tree_1);
    insert_node(40,tree_1);
    insert_node(20,tree_1);
    insert_node(50,tree_1);
    print_tree_from_root(tree_1.root);
}
void init_tree(binary_tree& in_tree)
{
    in_tree.root = NULL;
}
node* create_new_node(int data)
{
    node* temp = new node;
    temp->data = data;
    temp->left_linker = NULL;
    temp->right_linker = NULL;
    return temp;
}
void insert_node(int in_data,binary_tree& in_tree)
{
    if(tree_empty(in_tree))
    {
        in_tree.root = create_new_node(in_data);
    }
    else
    {
        insert_recursively(in_data,in_tree.root);
    }
}
node* insert_recursively(int in_data,node* in_root)
{
    if(in_root == 0)
    {
        in_root = create_new_node(in_data);
        return in_root;
    }
    else
    {
        if(in_data > in_root->data)
        {
            in_root->right_linker = insert_recursively(in_data,in_root->right_linker);
        }
        else if(in_data < in_root->data)
        {
            in_root->left_linker = insert_recursively(in_data,in_root->left_linker);
        }
    }
}
bool tree_empty(binary_tree& in_tree)
{
    if(in_tree.root == 0)
        return true;
    return false;
}
void print_tree_from_root(node* in_root)
{
    if(in_root == NULL)
    {
        return;
    }
    else
    {
        cout<<in_root->data<<endl;
        print_tree_from_root(in_root->left_linker);
        print_tree_from_root(in_root->right_linker);
    }
}

insert_recursively当它进入else块时不会返回值,但是您将返回的值(垃圾)存储在right_linkerleft_linker中。

请注意,编译器会发出相应的警告:

警告c4715:'insert_recursistifiely':并非所有控制路径返回值