2017-07-21 4 views
0

私は、このような質問が受け入れている場合はわからないと、彼らはありませんが、私はこれがその答え意見と事実ソリューションの背後にあるによって異なりますちょうど議論の問題ではないと思われる場合、私は喜んで/編集、それを削除します。キューがバイナリツリーのレベルオーバトラバーサルで動作するのはなぜですか?

私は、バイナリツリーのレベルオーバトラバーサルについて読んでいました。キューデータ構造を使用すると、O(n)ソリューションが存在します。

アルゴリズムはtemp_nodeがNULLでない間、空のキューQに

2)temp_node =ルート

3)ループを作成)この

1と同様である

a) print temp_node->data. 
b) Enqueue temp_node’s children (first left then right children) to q 
c) Dequeue a node from q and assign it’s value to temp_node 

私はアルゴリズムを理解しますが、私は理解できないことはWOUかということですもし彼が手前でそれを知らなかったら、この解決策を考えてください。つまり、キューのどのプロパティ(およびバイナリツリーでもよい)によって、この場合に使用される正しいDSになります。バイナリツリーのレベルオーバトラバーサルのためにここでキューを使うことの背後にある考え方は何ですか?ありがとう!!

enter image description here

上記ツリーのレベル順トラバーサルは、ツリーの幅優先を横断するとき、幅が広いと広い取得1 2 3 4 5

答えて

0

あります。 「やる」リストのように、次に深く訪れるサブツリーのルーツを追跡するキューが必要です。

0

私はあなたがより多くのBFSを勉強すれば、あなたは自動的にあなたの答えを得ると思います。

キューを使用すると、一方の端部から押して、別の端から開くことができ、特殊な性質を持っています。ために
は、彼らがこれは順序トラバーサルが何をするかのレベルで、我々はマークが訪問する要素をプッシュするもう一方の端から、我々が訪問したノードをマークし、それらをポップレベル順トラバーサル、のよう

を横断しました。操作の両方で

ルック注意深く、両方の動作は互いに独立しています。この操作の分離は、キューによって提供されます。

0

一般に、順序通りの探索中にノード(たとえばN)を訪れると、左の子を最初にキューに入れ、次に右の子を(両方存在すると仮定して)プッシュし、キューの次の要素に移動します。

さて、この次の要素が以前に訪問したノードN

の右の要素になります。基本的キューのFIFOプロパティと組み合わせて再帰を使用すると、インオーダートラバーサル行うことができます。 「インオーダートラバーサル」はいえないのです

+0

。 Qのツリーの順序は4-2-5-1-3です。それはw DFS/stack(LIFO)で行われます。しかしFIFOプロパティが幅優先になるのはあなたのことです。 –

関連する問題