所以我一直在学习Binary Trees的所有内容,并决定编写一个简单的程序来向我自己证明我可以将我的知识应用到工作代码中。我试图用这个代码做的就是在二叉树中添加4个数字,并按照从最小到最大的顺序输出数字。虽然,我确实遇到了我的代码问题。当我运行代码时,Visual Studio在第29行和第59行将其分解。我认为问题与递归函数addLeaf有关,但可能与其他东西有关。任何建议,解决方案或输入将不胜感激。!
// customer
else if ( objectType == 2 ){
List<Customer> myCustomer = getMyCustomer();
// how to convert ***myCustomer*** to List<Object> ?
}
答案 0 :(得分:1)
我可以发现一个问题:
void addLeaf(int data)
{
node* curr = root;
.....
//Check for curr->left
if(curr->left != NULL)
{
addLeaf(data);
}
你所谓的递归什么也没做。它只会继续调用addLeaf
函数,并且该函数会继续检查root的左边是否为空,然后再次调用addLeaf
。
重构所有代码。不要使用任何全局变量。确保您传递了正确的参数(例如,您应该将下一级节点传递给addLeaf)
答案 1 :(得分:0)
addleaf
函数将无限运行。您只需不加任何检查即可添加到根目录。
您将Ptr
分配给root
,然后使用new
,将其分配给内存中的某个新地址,而根目录不指向该地址。
您必须通过Ptr
引用addLeaf
,否则将对其副本进行更改,该副本会在addLeaf
终止时被销毁。
printTree
打印当前节点值两次(复制粘贴错误?)
以下是完整的代码:
#include "stdafx.h"
#include <iostream>
#include <cstdlib>
#include <fstream>
using namespace std;
struct node
{
int data;
node* left;
node* right;
};
node* root = NULL;
node* createLeaf(int data)
{
node* n = new node;
n->data = data;
n->left = NULL;
n->right = NULL;
return n;
}
void addLeaf(node* &curr, int data)
{
//If tree is empty, create first node
if(curr == NULL)
{
curr = createLeaf(data);
}
//Left(Less than)
else if(data < curr->data)
{
addLeaf (curr->left, data);
}
//Right(greater than)
else if(data > curr->data)
{
addLeaf(curr->right, data);
}
else
{
cout << "The data " << data << " has already been received\n";
}
}
void printTree(node* Ptr)
{
if(root != NULL)
{
if(Ptr->left != NULL)
{
printTree(Ptr->left);
}
cout << Ptr->data << " ";
if(Ptr->right != NULL)
{
printTree(Ptr->right);
}
}
else
{
cout << "The Tree is empty\n";
}
}
int main()
{
int data[4] = {1, 7, 5, 4};
for(int i = 0; i < 4; i++)
{
addLeaf(root, data[i]);
}
printTree(root);
system("PAUSE");
return 0;
}