給出了一種特殊類型的樹,其中所有的葉子都用不同的符號標記,而其他所有的節點都用虛擬字符0標記。每個節點可以有0或最多2個節點。遍歷的樹被寫入文件。請給出一個算法從這個遍歷構建樹。如何重新創建索引遍歷存儲在文件中的樹
2
A
回答
3
問題中解釋的問題是難以解決的,因爲對於給定的有序遍歷,即使樹葉是衆所周知的,也可能有多棵樹。 (在附上的例子中,爲了兩棵樹都是1,2,3,4,5和1,3,5都是葉子)。
你可能要同時存儲序遍歷和預prder遍歷,並從那裏,有一個簡單的遞歸算法來重建樹:
reconstruct(List preOrder,List inOrder):
if preOder.empty() == true:
return nil
root.value<-preOrder[0]
left_in = inOrder.filter(left,root) (*)
left_pre = preOrder.filter(left,root) (*)
root.left = reconstruct(left_pre,left_in)
right_in = inOrder.filter(right,root) (*)
right_pre = preOrder.filter(right,root) (*)
root.right= reconstruct(right_pre,right_in)
return root
(*)濾鏡找到所有元素保持在根的左邊/右邊(按順序)並返回它,對於預定單,它將按順序返回相同的一組節點,但它們出現在預定單列表中。
附:
編輯::例如如上所述添加停止條件的遞歸算法。
編輯2:
過濾器看起來像這(僞代碼)(假設每個元素都是唯一的):
inOrderFilter(list,root):
i <- 0
left <- [] (empty list)
right <- []
while (list[i] != root):
left.add(list[i])
i <- i+1
while (i < list.size):
right.add(list[i[)
i <- i+1
return pair(left,right)
preOrderFilter(list,left_in,right_in):
left <- []
right <- []
for each e in list:
if e in left_in:
left.add(e)
else if e in right_in:
right.add(e)
return pair (left,right)
基本上,你需要的一切留根的left_in,對於right_in,您需要根的所有權利(根據順序列表中的左側和右側)。
對於left_pre和right_pre:您需要left_in,right_in的排列,它們中的每一個都應具有與XXX_in相同的元素,但它們應保留它們在原始預訂中的順序。
相關問題
- 1. 存儲樹的遍歷C
- 2. 存儲樹的遍歷
- 3. 重複使用樹遍歷方法vs創建新的遍歷方法
- 4. 是否可以遍歷Lucene索引中存儲的文檔?
- 5. 如何在存儲庫中重新創建SVN'格式'文件?
- 6. 使用DefaultMutableTreeNode創建的遍歷樹
- 7. 遍歷樹遍歷
- 8. 文件系統樹遍歷
- 9. 從存儲中.git文件夾重新創建git存儲庫
- 10. 在樹中遍歷
- 11. PHP二叉搜索樹,如何遍歷
- 12. 如何遍歷S3存儲桶中的文件?
- 13. 在C中自動遍歷樹遍歷#
- 14. Python-如何更新循環遍歷文件中的行的索引?
- 15. Python:二叉樹類:用遍歷重建
- 16. 如果B +樹索引文件不存在,如何將B +樹索引文件加載到內存中?
- 17. 引導樹視圖遍歷
- 18. 二叉搜索樹遍歷
- 19. 遍歷二叉搜索樹
- 20. 二叉搜索樹遍歷
- 21. 遍歷二叉搜索樹
- 22. 如何在遍歷文件夾樹時刪除文件
- 23. 樹的遍歷在Java中
- 24. 如何在Lucene索引中重新創建刪除的段文件?
- 25. 如何在樹中遍歷序列時將值存儲在列表中?
- 26. VFP。重新創建索引
- 27. 樹的遍歷
- 28. 如何創建其帖子和遍歷順序已知的樹?
- 29. 樹遍歷如何工作?
- 30. 如何在存儲過程中創建過濾索引(SQL Server)
以樹爲例,按順序遍歷遍歷它,按照如何到達它們的順序寫下節點。現在反過來,應該幫助你創建樹。 – DumbCoder
如果您嘗試提出問題並列出算法,解釋您認爲的工作位,以及哪些位不需要,您如何嘗試解決問題或不確定的問題,這會更好。人們不介意幫助,但通常只有在做了一些嘗試之後...... –
@DumbCoder:它不起作用。他想要的是完全相同的樹,這隻能按順序遍歷才能完成,但也許附加信息(哪個節點是葉,哪些不是)可能在這裏派上用場。 – amit