1

私は検索している二分木を持っています:

TreeNode<Vessel*>* node = this->tree_->search("PotatoFace");
string mystring = node->print();

実行すると、ノードには正しいデータが含まれていますが、入力するとすぐにそのデータを印刷すると、次のようになります。

string TreeNode<T>::print()
{
return data_->toString();
}

「this」(「ノード」である必要があり、「ノード」と同じメモリ アドレスを持つ)には、Vessel* を含むすべてのデータ メンバーが null に設定されています。

何か案は?

ありがとうございました!

フル ツリー ノード:

#pragma once
#include <cstring>
#include <fstream>
#include <iostream>
using namespace std;

template <class T>
class TreeNode
{
private:
TreeNode<T>* greaterNode_;
TreeNode<T>* lessNode_;
TreeNode<T>* parentNode_;
TreeNode<T>* getLowest_();
T data_;


public:
TreeNode();
TreeNode(T data);
void add(T data);
bool operator==(const string &rhs);
TreeNode* search(T data);
void seqSearch(string data, TreeNode<T>* node);
void del(TreeNode<T>* root);
void toFile(ofstream& BSTFile);
TreeNode* compare(int sig[4]);
TreeNode* getRoot();
TreeNode* forward(TreeNode<T>* node);

string print();
};


template <class T>
TreeNode<T>::TreeNode(T data)
{
data_ = data;
greaterNode_ = lessNode_ = parentNode_= NULL;

}
template <class T>
TreeNode<T>::TreeNode()
{
}

template <class T>
void TreeNode<T>::seqSearch(string data, TreeNode<T>* node )
{
if(*data_ == data)
{
    *node = this->data_;
}
if(this->lessNode_)
{
    this->lessNode_->seqSearch(data, node);
}   
if(this->greaterNode_)
{
    this->greaterNode_->seqSearch(data, node);
}   
}

template <class T>
string TreeNode<T>::print()
{
return data_->toString();
}

なぜ機能しないのかを説明する方法はまだ完全にはわかりませんが、スコープの問題であり、バイナリ ツリー クラス ツリー ノードの外側でデータが失われました。ノードを返すすべてのツリー関数を取り出し、すべてが機能するようになりました。

4

2 に答える 2

0

本当に書きたいと思いますか:

string mystring = node->print();

いいえ

string mystring = hello->print();

はいの場合、「これ」のように見えます

string mystring = node->print();

はnullです(ノードはnullです)。これにはいくつかの理由が考えられます。

  • ノードが初期化されることはありません
  • ノードはsearch( "something")で設定する必要がありますが、searchはnullを返します

より多くのコードを貼り付けると非常に役立ちます。

于 2012-05-07T07:12:42.680 に答える
0

なぜ機能しないのかを説明する方法はまだ完全にはわかりませんが、スコープの問題であり、バイナリ ツリー クラス ツリー ノードの外側でデータが失われました。

これは、Binary Tree クラスが TreeNode* 型を返さないようにすることで修正され、ノードの値を取得した後に必要な他の関数を実行することは、Binary Tree クラス内で行われました。これで動作します。お手伝いありがとう!

于 2012-05-09T07:30:03.247 に答える