【解決方法】二分木検索を再帰的に印刷する方法


こんにちは、

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();
	}

コメント

タイトルとURLをコピーしました