[ad_1]
こんにちは、
inorder メソッドによって再帰的に出力する関数をヘッダーに実装しようとしました。二分木検索 (最小値から最大値まで各ノードを出力)
関数自体はパラメーターを取りません
私はこれを数時間以上自分でやろうとしました。
誰かがこれを理解するのを手伝ってくれたら嬉しいです
これらは実装です:
C++
void BSNode::printNodes() const //prints the smallest _data value to the biggest { if (_left == NULL) { cout << _data << endl; } else { return _left->printNodes(); } if (_right == NULL) { cout << _data << endl; } else { return _right->printNodes(); } } BSNode::BSNode(string data) { _data.clear(); _data.assign(data); _count=1; _right = NULL; _left = NULL; } BSNode::BSNode(const BSNode& other) { _data.clear(); _data.assign(other._data); _count = other._count; _right = other._right; _left = other._left; } BSNode::~BSNode() { delete _right; delete _left; _data.clear(); _count =0; }
ヘッダーは次のとおりです。
C++
class BSNode { public: BSNode(string data); BSNode(const BSNode& other); ~BSNode(); void insert(string value); string getData() const; BSNode* getLeft()const ; BSNode* getRight() const; void printNodes() const;//prints the smallest _data value to the biggest private: BSNode* _left; BSNode* _right; string _data; int _count;
解決策 1
少し立ち止まって、自分が何をしようとしているのか考えてみてください。
あなたがしたいことは、ノードを取り、それを左のグラフ(ある場合)、次に右のグラフ(ある場合)、次にノード自体を出力することです:
したがって、バイナリ ツリーがある場合は次のようになります。
1 / \ 2 3 / / \ 4 5 6
印刷したい
4 2 5 6 3 1
はい?
それほど遠くはありませんが、コードの戻りが早すぎます。 もう少し簡単なことを試してください:
(これは宿題なので、ここでは実際のコードは示しません)
C++
node.Print { if (n.Left != null) n.Left.Print() if (n.Right != null) n.Right.Print() Display(n.Text) }
解決策 2
私はなんとか解決策を見つけることができました…..どういうわけか….しばらく時間がかかりました…
C#
void BSNode::printNodes() const //prints the smallest _data value to the biggest { if (_left != NULL) { _left->printNodes(); } cout << _data << endl; if (_right != NULL) { _right->printNodes(); }
[ad_2]
コメント