Ben de çok daha değişik bir şey yaptım.
https://image.ibb.co/hvLrhb/mongotree.png
Şimdi bu şekilde bir ağacımız var diyelim. Bir dügümün tüm alt düğümlerini belirli bir sırayla nasıl bulabiliriz diye düşünüyordum.
Örneğin 0 numaralı düğümün tüm alt düğümlerini bulmak istiyoruz ama şu sırayla:
[0, 1, 4, 5, 6, 7, 2, 8, 9, 10, 11, 3, 12, 16, 17, 18, 19, 13, 14, 15]
Neden bu sırayla olduğuna gelince bunlar aslında Reddit tarzı içiçe geçmiş bir yorum sistemi diye düşünebiliriz. Bunları ekrana basmak için de en mantıklı sıralama yukarıdaki gibi geldi.
Mongodb kullanarak ağaç düğümlerini de şu şekilde oluşturdum.
{ "_id" : 0, "sıra" : 10000000, "derinlik" : 0, "oluşturmazamanı" : { "$date" : "2017-11-01T19:23:09.040+0000" }, "soruno" : 1, "üst" : null, "içerik" : "kök" }
{ "_id" : 1, "sıra" : 1000000, "derinlik" : 1, "oluşturmazamanı" : { "$date" : "2017-11-01T19:23:09.057+0000" }, "soruno" : 1, "üst" : 0, "içerik" : "Bu ilk yanıtdır" }
{ "_id" : 2, "sıra" : 2000000, "derinlik" : 1, "oluşturmazamanı" : { "$date" : "2017-11-01T19:23:09.062+0000" }, "soruno" : 1, "üst" : 0, "içerik" : "Bu ikinci yanıtdır" }
{ "_id" : 3, "sıra" : 3000000, "derinlik" : 1, "oluşturmazamanı" : { "$date" : "2017-11-01T19:23:09.067+0000" }, "soruno" : 1, "üst" : 0, "içerik" : "Bu üçüncü yanıtdır" }
{ "_id" : 4, "sıra" : 100000, "derinlik" : 2, "oluşturmazamanı" : { "$date" : "2017-11-01T19:23:09.072+0000" }, "soruno" : 1, "üst" : 1, "içerik" : "Dördüncü yanıt" }
{ "_id" : 5, "sıra" : 200000, "derinlik" : 2, "oluşturmazamanı" : { "$date" : "2017-11-01T19:23:09.085+0000" }, "soruno" : 1, "üst" : 1, "içerik" : "Beşinci yanıt" }
{ "_id" : 6, "sıra" : 300000, "derinlik" : 2, "oluşturmazamanı" : { "$date" : "2017-11-01T19:23:09.099+0000" }, "soruno" : 1, "üst" : 1, "içerik" : "Altıncı yanıt" }
{ "_id" : 7, "sıra" : 400000, "derinlik" : 2, "oluşturmazamanı" : { "$date" : "2017-11-01T19:23:09.113+0000" }, "soruno" : 1, "üst" : 1, "içerik" : "Yedinci yanıt" }
{ "_id" : 8, "sıra" : 100000, "derinlik" : 2, "oluşturmazamanı" : { "$date" : "2017-11-01T19:23:09.126+0000" }, "soruno" : 1, "üst" : 2, "içerik" : "Sekizinci yanıt" }
{ "_id" : 9, "sıra" : 200000, "derinlik" : 2, "oluşturmazamanı" : { "$date" : "2017-11-01T19:23:09.140+0000" }, "soruno" : 1, "üst" : 2, "içerik" : "Dokuzuncu yanıt" }
{ "_id" : 10, "sıra" : 300000, "derinlik" : 2, "oluşturmazamanı" : { "$date" : "2017-11-01T19:23:09.153+0000" }, "soruno" : 1, "üst" : 2, "içerik" : "Onuncu yanıt" }
{ "_id" : 11, "sıra" : 400000, "derinlik" : 2, "oluşturmazamanı" : { "$date" : "2017-11-01T19:23:09.167+0000" }, "soruno" : 1, "üst" : 2, "içerik" : "Onbirinci yanıt" }
{ "_id" : 12, "sıra" : 100000, "derinlik" : 2, "oluşturmazamanı" : { "$date" : "2017-11-01T19:23:09.183+0000" }, "soruno" : 1, "üst" : 3, "içerik" : "Onikinci yanıt" }
{ "_id" : 13, "sıra" : 200000, "derinlik" : 2, "oluşturmazamanı" : { "$date" : "2017-11-01T19:23:09.218+0000" }, "soruno" : 1, "üst" : 3, "içerik" : "Onüçüncü yanıt" }
{ "_id" : 14, "sıra" : 300000, "derinlik" : 2, "oluşturmazamanı" : { "$date" : "2017-11-01T19:23:09.237+0000" }, "soruno" : 1, "üst" : 3, "içerik" : "Ondördüncü yanıt" }
{ "_id" : 15, "sıra" : 400000, "derinlik" : 2, "oluşturmazamanı" : { "$date" : "2017-11-01T19:23:09.249+0000" }, "soruno" : 1, "üst" : 3, "içerik" : "Onbeşinci yanıt" }
{ "_id" : 16, "sıra" : 10000, "derinlik" : 3, "oluşturmazamanı" : { "$date" : "2017-11-01T19:23:09.261+0000" }, "soruno" : 1, "üst" : 12, "içerik" : "Onaltıncı yanıt" }
{ "_id" : 17, "sıra" : 20000, "derinlik" : 3, "oluşturmazamanı" : { "$date" : "2017-11-01T19:23:09.275+0000" }, "soruno" : 1, "üst" : 12, "içerik" : "Onyedinci yanıt" }
{ "_id" : 18, "sıra" : 30000, "derinlik" : 3, "oluşturmazamanı" : { "$date" : "2017-11-01T19:23:09.289+0000" }, "soruno" : 1, "üst" : 12, "içerik" : "Onsekizinci yanıt" }
{ "_id" : 19, "sıra" : 40000, "derinlik" : 3, "oluşturmazamanı" : { "$date" : "2017-11-01T19:23:09.303+0000" }, "soruno" : 1, "üst" : 12, "içerik" : "Ondokuzuncu yanıt" }
Dikkat ederseniz derinlik azaldıkça 10^7 den başlamak üzere azalarak bir katsayıyla çarpılıyor. Bu sıralamayı bulabilmek için de sıra numarası en küçük olan elemanı çıkartacak bir öncelikli kuyruk (https://dbader.org/blog/priority-queues-in-python) kullandım.
İlginç bir şekilde bu da daha önce konuştuğumuz 8 bilmece (http://ddili.org/forum/thread/1579) probleminin çözümüyle aynı (ya da çok benzer) yöntemi kullanıyor.
--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]