二叉樹迭代器(中序遞迴、前序和後序遍歷)演算法
二叉樹(Binary Tree)的前序、中序和後續遍歷是演算法和資料結構中的基本問題,基於遞迴的二叉樹遍歷演算法更是遞迴的經典應用。
假設二叉樹結點定義如下:
struct Node {
int value;
Node *left;
Node *right;
}
中序遞迴遍歷演算法:
void inorder_traverse(Node *node) {
if (NULL != node->left) {
inorder_traverse(node->left);
}
do_something(node);
if (NULL != node->right) {
inorder_traverse(node->right);
}
}
前序和後序遍歷演算法類似。
但是,僅有遍歷演算法是不夠的,在許多應用中,我們還需要對遍歷本身進行抽象。假如有一個求和的函式sum,我們希望它能應用於連結串列,陣列,二叉樹等等不同的資料結構。這時,我們可以抽象出迭代器(Iterator)的概念,通過迭代器把演算法和資料結構解耦了,使得通用演算法能應用於不同型別的資料結構。我們可以把sum函式定義為:
int sum(Iterator it)
連結串列作為一種線性結構,它的迭代器實現非常簡單和直觀,而二叉樹的迭代器實現則不那麼容易,我們不能直接將遞迴遍歷轉換為迭代器。究其原因,這是因為二叉樹遞迴遍歷過程是編譯器在呼叫棧上自動進行的,程式設計師對這個過
相關文章
- 遞迴和迭代實現二叉樹先序、中序、後序和層序遍歷遞迴二叉樹
- 【根據前序和中序遍歷構造二叉樹】棧+迭代 || 遞迴二叉樹遞迴
- 二叉樹的前序、中序、後序的遞迴和迭代實現二叉樹遞迴
- 二叉樹建立,前序遍歷,中序遍歷,後序遍歷 思路二叉樹
- 二叉樹的建立、前序遍歷、中序遍歷、後序遍歷二叉樹
- 二叉樹的前序、中序、後序三種遍歷二叉樹
- 二叉樹的前序,中序,後序遍歷方法總結二叉樹
- 資料結構與演算法——二叉樹的前序遍歷,中序遍歷,後序遍歷資料結構演算法二叉樹
- 二叉樹的前中後序遍歷(遞迴和非遞迴版本)二叉樹遞迴
- 非遞迴遍歷二叉樹的四種策略-先序、中序、後序和層序遞迴二叉樹
- 【演算法】二叉樹、N叉樹先序、中序、後序、BFS、DFS遍歷的遞迴和迭代實現記錄(Java版)演算法二叉樹遞迴Java
- 二叉樹——後序遍歷的遞迴與非遞迴演算法二叉樹遞迴演算法
- Java中用遞迴和迭代實現二叉樹的中序( InOrder )遍歷Java遞迴二叉樹
- LintCode 前序遍歷和中序遍歷樹構造二叉樹二叉樹
- 【樹01】對二叉樹前序/中序/後序遍歷演算法的一些思考二叉樹演算法
- [資料結構]二叉樹的前中後序遍歷(遞迴+迭代實現)資料結構二叉樹遞迴
- 非遞迴先序遍歷二叉樹遞迴二叉樹
- 刷題筆記:樹的前序、中序、後序遍歷筆記
- 二叉樹 前序、中序、後序二叉樹
- 演算法 -- 實現二叉樹先序,中序和後序遍歷演算法二叉樹
- 二叉樹中序和後序遍歷表示式二叉樹
- 根據二叉樹的前序遍歷和中序遍歷輸出二叉樹;二叉樹
- 【資料結構與演算法】二叉樹的 Morris 遍歷(前序、中序、後序)資料結構演算法二叉樹
- 144.二叉樹的前序遍歷145.二叉樹的後序遍歷 94.二叉樹的中序遍歷二叉樹
- 根據前序遍歷序列、中序遍歷序列,重建二叉樹二叉樹
- 非遞迴實現先序遍歷和中序遍歷遞迴
- PHP基於非遞迴演算法實現先序、中序及後序遍歷二叉樹操作示例PHP遞迴演算法二叉樹
- [java] 二叉樹的後序遍歷(遞迴與非遞迴實現)Java二叉樹遞迴
- 889. 根據前序和後序遍歷構造二叉樹二叉樹
- 二叉樹前序、中序、後序遍歷相互求法(code留著看,概念先看了)二叉樹
- 94. 二叉樹的中序遍歷(迭代)二叉樹
- 【二叉樹】前中序求後序,中後序求前序二叉樹
- 二叉樹--後序遍歷二叉樹
- 遍歷二叉樹的迭代和遞迴方法二叉樹遞迴
- 二叉樹:構造二叉樹(通過前序和中序遍歷)、映象翻轉、層次遍歷二叉樹
- 二叉樹的先,中,後序遍歷二叉樹
- 二叉樹的先中後序遍歷二叉樹
- 二叉樹的前中後序遍歷二叉樹