最初に断っておきますが、これは宿題ではありません。面接の準備をしていて、この問題に遭遇しました。インオーダーおよびレベルオーダートラバーサルの定義を渡すことができると思います。:-)。
例えば:
50
/ \
10 60
/ \ / \
5 20 55 70
/ / \
51 65 80
上記のツリーの順序順およびレベル順のトラバーサルは次のとおりです。
5、10、20、50、51、55、60、65、70、80
50、10、60、5、20、55、70、51、65、80
私の考え:
(1) レベル順序配列をトラバースして、順序配列に現れる最初の要素を見つけます。この要素を現在のルートと呼びます。
(2) 順序付けられた配列で現在のルートのインデックスを見つけます。順序配列はインデックスで区切られています。順序配列の左側は現在のルートの左側のサブツリーであり、順序配列の右側は現在のルートの右側のサブツリーです。
(3) 順序配列を左側として更新し、手順 1 に進みます。
(4) 順序配列を右辺として更新し、手順 2 に進みます。
上のツリーを例にとります。
(1) 5 is the first element appears in the in-order array. (2) [50 ...60] is the left sub-tree of 5 and [20 ... 80] is the right sub-tree of 5. (3) update the in-order array as [50 ... 60] (1) 10 is the first element appears in [50 10 60]. (2) [50] is the left sub-tree of 10 and [60] is the right sub-tree of 10. (3) update ...
ソリューションの検証を手伝ってくれる人はいますか? そして、別のものを与えるなら本当に感謝します。