2016-12-28 9 views
-4

いくつかの基本的な方法で新しいBinaryTreeクラスを作成しようとしましたが、テストプログラムが動作していないようです。誰がコードの何が間違っているのを指摘できますか?C++でバイナリツリーを実装する際のエラー

プログラム:すべての

#include "stdafx.h" 
#include <iostream> 
#include "BinaryTree.h" 
using namespace std; 

int main() { 
    BinaryTree example; 
    example.insertNode(1); 
    cout << example.height() << endl; 

    return 0; 
} 
+2

デバッガを使用してコードをステップ実行して何が起きているかを確認してください。 –

+0

'if(root == NULL){root-> data = data;}' ???最初にルートノードを作成する必要があります: '{root = new TreeNode; root-> data = data;} ' –

+0

また、TreeNodeの定義で' left'と 'right'を' nullptr'に初期化し、 'NULL'の代わりに' nullptr'を使います。 –

答えて

0

まず、nodeでもメモリが割り当てられていません。コード

if (root == NULL) { 
     root->data = data; 
    } 

が最初にこのコードで

if (root == NULL) { 
     // Allocate memory to root 
     root->data = data; 
    } 

に変更する必要があります

int BinaryTree::height(TreeNode* node) { 
    if (node == NULL) { 
     return 0; 
    } 
    else { 
     return 1 + max(height(node->left), height(node->right)); 
    } 
} 

あなたのツリーはexample.insertNode(1);

ので、実行は意志の結果としてのみ1要素を持っていますelse部分に来る

ここであなたはnode->leftまたはnode->rightが存在するかどうかをチェックせずに

return 1 + max(height(node->left), height(node->right));

をやっています。また、node->leftnode->rightNULL/nullptrの値で初期化していないため、予期しない結果につながるガベージが含まれています。

+1

"ノード - >左とノード - >右"を初期化していないか、またはノードも "初期化していないため"です。 OPのポストのどこにも、実際に割り当てられたTreeNodeはありません。 – WhozCraig

+0

@WhozCraigあなたが正しくて、それを逃した:( –

関連する問題