#include <iostream>
int sizeWhileBuilding = 0;
int sizeWhileCounting = 0;
struct Node
{
Node(int theData) :
data(theData), left(NULL), right(NULL)
{ std::cout << "Node::Node() with data " << theData << std::endl; }
int data;
Node* left;
Node* right;
};
Node* insertNode(Node* root, int data)
{
if(!root)
{
++sizeWhileBuilding;
std::cout << "Current size is " << sizeWhileBuilding << std::endl;
std::cout << "Making new node with " << data << std::endl;
root = new Node(data);
}
else if(root->data < data)
{
std::cout << "The node " << root->data << " is lesser than " << data << ". Making right node" << std::endl;
root->right = insertNode(root->right, data);
}
else if(root->data > data)
{
std::cout << "The node " << root->data << " is greater than " << data << ". Making left node" << std::endl;
root->left = insertNode(root->left, data);
}
return root;
}
int main()
{
std::cout << "Making binary tree" << std::endl;
Node* root;
if(root)
{
std::cout << "Root is NOT null after creation" << std::endl;
}
else
{
std::cout << "Root is null after creation" << std::endl;
}
std::cout << "==============================================================================" << std::endl;
root = insertNode(root, 10);
//Problem line below
std::cout << "The size of the tree is " << sizeWhileBuilding << std::endl;
}
"問題行"をコメントアウトしてこのコードを実行すると、ノード10が実行され、ツリーにノード10が挿入されます。私が問題行でそれを実行すると、私はそれがcoredumpsだと思う。グローバル変数を使用した場合のコアダンプ
問題の行なしで実行すると、メインの印刷の最初にelse部分が「作成後にルートがnullです」というメッセージが表示されます。問題enter code here
では、「作成が印刷された後にルートがヌルではありません」という行が表示されます。
私が理解できないのは、なぜノード*ルートですか。初期化は、グローバル変数が使用されているかどうかによって異なります。