Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/145.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++函数,它将节点添加到二进制搜索树中,给出要插入的节点的值,以及BST的根。 令人惊讶的是,我无法推动任何元素。尽管我确保编译器输入了插入节点的语句,但树中没有我试图添加的任何节点。我认为问题可能在于如何在函数参数中传递节点。有人能帮忙吗?非常感谢。下面是我的节点类型和函数的实现 struct Node{ int value; Node *left; Node *right; }; //this method adds a new node with value v to Binary Search Tree // node is initially the root of the tree void Push_To_BST(Node* node,int v) { // the right place to add the node if(node==NULL) { node=new Node(); node->value= v; node->left= NULL; node->right=NULL; } //the value to be added is less than or equal the reached node else if(v <= node->value) { //adding the value to the left subtree Push_To_BST(node->left,v); } //the value to be added is greater than the reached node else if(v > node->value) { //adding the value to the right subtree Push_To_BST(node->right,v); } } struct节点{ int值; 节点*左; 节点*右; }; //此方法向二叉搜索树添加一个值为v的新节点 //节点最初是树的根 void Push_To_BST(节点*节点,int v) { //添加节点的正确位置 if(node==NULL) { node=新节点(); 节点->值=v; 节点->左=空; 节点->右=空; } //要添加的值小于或等于到达的节点 else if(v值) { //将值添加到左子树 按按钮到按钮(节点->左,v); } //要添加的值大于到达的节点 else if(v>节点->值) { //将值添加到右子树 将按钮推到按钮(节点->右侧,v); } }_C++_Visual C++_C++11 - Fatal编程技术网

将节点插入到二叉搜索树中 我试图实现一个简单的C++函数,它将节点添加到二进制搜索树中,给出要插入的节点的值,以及BST的根。 令人惊讶的是,我无法推动任何元素。尽管我确保编译器输入了插入节点的语句,但树中没有我试图添加的任何节点。我认为问题可能在于如何在函数参数中传递节点。有人能帮忙吗?非常感谢。下面是我的节点类型和函数的实现 struct Node{ int value; Node *left; Node *right; }; //this method adds a new node with value v to Binary Search Tree // node is initially the root of the tree void Push_To_BST(Node* node,int v) { // the right place to add the node if(node==NULL) { node=new Node(); node->value= v; node->left= NULL; node->right=NULL; } //the value to be added is less than or equal the reached node else if(v <= node->value) { //adding the value to the left subtree Push_To_BST(node->left,v); } //the value to be added is greater than the reached node else if(v > node->value) { //adding the value to the right subtree Push_To_BST(node->right,v); } } struct节点{ int值; 节点*左; 节点*右; }; //此方法向二叉搜索树添加一个值为v的新节点 //节点最初是树的根 void Push_To_BST(节点*节点,int v) { //添加节点的正确位置 if(node==NULL) { node=新节点(); 节点->值=v; 节点->左=空; 节点->右=空; } //要添加的值小于或等于到达的节点 else if(v值) { //将值添加到左子树 按按钮到按钮(节点->左,v); } //要添加的值大于到达的节点 else if(v>节点->值) { //将值添加到右子树 将按钮推到按钮(节点->右侧,v); } }

将节点插入到二叉搜索树中 我试图实现一个简单的C++函数,它将节点添加到二进制搜索树中,给出要插入的节点的值,以及BST的根。 令人惊讶的是,我无法推动任何元素。尽管我确保编译器输入了插入节点的语句,但树中没有我试图添加的任何节点。我认为问题可能在于如何在函数参数中传递节点。有人能帮忙吗?非常感谢。下面是我的节点类型和函数的实现 struct Node{ int value; Node *left; Node *right; }; //this method adds a new node with value v to Binary Search Tree // node is initially the root of the tree void Push_To_BST(Node* node,int v) { // the right place to add the node if(node==NULL) { node=new Node(); node->value= v; node->left= NULL; node->right=NULL; } //the value to be added is less than or equal the reached node else if(v <= node->value) { //adding the value to the left subtree Push_To_BST(node->left,v); } //the value to be added is greater than the reached node else if(v > node->value) { //adding the value to the right subtree Push_To_BST(node->right,v); } } struct节点{ int值; 节点*左; 节点*右; }; //此方法向二叉搜索树添加一个值为v的新节点 //节点最初是树的根 void Push_To_BST(节点*节点,int v) { //添加节点的正确位置 if(node==NULL) { node=新节点(); 节点->值=v; 节点->左=空; 节点->右=空; } //要添加的值小于或等于到达的节点 else if(v值) { //将值添加到左子树 按按钮到按钮(节点->左,v); } //要添加的值大于到达的节点 else if(v>节点->值) { //将值添加到右子树 将按钮推到按钮(节点->右侧,v); } },c++,visual-c++,c++11,C++,Visual C++,C++11,注意你的引用 void Push_To_BST(Node* node,int v) { // the right place to add the node if(node==NULL) { node=new Node(); // etc 正在为其分配内存的节点是一个局部变量。您需要传入一个节点**,以传递指向新创建节点的指针 例如: void Push_To_BST(Node** pnode,int v) { Node* node = *pnode

注意你的引用

void Push_To_BST(Node* node,int v) 
{ 

// the right place to add the node 
if(node==NULL) 
{  
    node=new Node(); 
    // etc
正在为其分配内存的
节点是一个局部变量。您需要传入一个
节点**
,以传递指向新创建节点的指针

例如:

void Push_To_BST(Node** pnode,int v) 
{ 
    Node* node = *pnode;

    // the right place to add the node 
    if(node==NULL) 
    {  
        node=new Node(); 
        // etc
    }
    else if(v < node->value)  
    {  
        //adding the value to the left subtree  
        Push_To_BST(&node->left,v);  
    }  
    // etc

您正在分配一个新节点并填充它,但从不更改现有节点中的指针以指向新节点。

您应该使用调试器跟踪程序的活动。一个问题是else if(v value)语句。如果v==node->value,则根本不应将其添加到树中。BST不能包含重复项。所以我会添加一个else来扔掉它们。或者干脆从
else if(v值)
中删除
=
,作为附录,考虑使用<代码> STD::SysDypPTR <代码>,而不是<代码>节点*<代码>,因为有意义的自动内存管理。谢谢你……但是当我把参数传递给节点**时,我会得到编译器错误。我需要在代码中添加任何进一步的修改吗?你能把修改过的零件全部寄给我吗?谢谢。部分代码是内联的。你可以很容易地适应其余的;-)<代码>节点*&
将更容易使用(即更少的去引用)。
Node* n = new Node;
Push_To_BST(&n, 2);