我很理解預訂,有序和後階遍歷算法。 (Reference)。我理解了一些用途:按順序遍歷二叉搜索樹,按順序克隆樹。但是我不能爲了我的生活而想出一個真正的世界任務,我需要通過後序遍歷來完成。現實世界前/後階遍歷樹遍歷的例子
你能舉個例子嗎?而且:你能給我預訂遍歷的更好用法嗎?
編輯:任何人都可以給我一個例子,而不是表達式樹和RPN?那真的是所有的後期訂單都適合嗎?
我很理解預訂,有序和後階遍歷算法。 (Reference)。我理解了一些用途:按順序遍歷二叉搜索樹,按順序克隆樹。但是我不能爲了我的生活而想出一個真正的世界任務,我需要通過後序遍歷來完成。現實世界前/後階遍歷樹遍歷的例子
你能舉個例子嗎?而且:你能給我預訂遍歷的更好用法嗎?
編輯:任何人都可以給我一個例子,而不是表達式樹和RPN?那真的是所有的後期訂單都適合嗎?
Topological sorting是樹木(或向無環圖)一個後序遍歷。
這個想法是,圖的節點表示任務,從A
到B
的邊表示A
必須在B
之前執行。拓撲排序會按順序排列這些任務,以使任務的所有依賴關係都比任務本身早出現。任何構建系統如UNIX make必須實現此算法。
Dario提到的例子 - 使用手動內存管理銷燬樹的所有節點 - 就是這個問題的一個實例。畢竟,摧毀一個節點的任務取決於其子女的破壞。
郵政編碼是(可以)由編譯器使用。考慮一個a + b + c
的表達式樹,機器語言將需要一個像a b + c +
這樣的序列。這也被稱爲Reverse polish Notation(RPN)。在維基百科頁面上,它說:「RPN又名後綴」
銷燬樹也需要後期訂單,就像創建/克隆它需要預訂。
正如Henk Holterman指出的那樣,使用手動內存管理銷燬樹通常是後序遍歷。
僞代碼:
destroy(node) {
if (node == null) return;
destroy(node.left)
destroy(node.right)
// Post-order freeing of current node
free(node)
}
優秀的問題! – Lazer 2010-08-20 22:30:48