簡體   English   中英

樹遍歷和序列化

[英]Tree traversal and serialization

我試圖直截了當地了解如何使用樹遍歷來唯一地識別樹,而它的症結似乎在於該樹是否為香草二叉樹(BT),或者是否也具有更嚴格的規定。是二叉搜索樹(BST)。 本文似乎表明,對於BT,單次有序,前序和后序遍歷將不會唯一地標識樹(在此上下文中,唯一地表示鍵的結構和值)。 這是文章的快速摘要:

BT
1.我們可以用預購+訂單和后購+訂單來唯一地重建BT。
2.如果我們還規定遍歷跟蹤節點的空子代,則也可以使用preorder + postorder。

((對我來說,一個開放的問題是,如果BT可以包含非唯一元素,則上述情況是否仍然成立)

BST
3.我們不能將inorder用於唯一的ID。 我們需要訂單+預購,或訂單+后訂單。

現在,(最后)我的問題是,我們可以僅使用預訂購還是僅使用后訂購來唯一標識BST? 我認為我們可以,因為這個問題和答案似乎是肯定的,我們可以使用預購,但是任何輸入都值得贊賞。

我不知道這里要問什么。 任何二叉樹,無論是否有序,都可以通過寫出重建該樹所需的一系列操作來序列化。 想象一下只有兩個指令的簡單堆棧機:

  • 將一個空樹(如果需要,則為NULL指針)推入堆棧

  • 分配一個新的內部節點N ,將值填充到N中 ,從堆棧中彈出頂部的兩棵樹,使它們成為N的左右子節點,最后將N壓入堆棧。

任何二進制樹都可以序列化為此類機器的“程序”。 序列化算法使用后序遍歷。

好的,您只能使用預購來識別樹。 這是可能的,因為僅在預遍歷中,當前節點的id才在子代的id之前。 因此,您可以逐行讀取遍歷輸出。

您可以檢查http://en.wikipedia.org/wiki/Tree_traversal#預訂以確認

因此,您可以將預遍歷視為樹中插入的列表。 因為將樹插入BST是確定性的,所以當您將值列表插入到空樹中時,總是得到同一棵樹。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM