去年考研學習過程中,看過郝斌的資料結構入門(講的挺好的),當時看過二叉樹的遍歷時,發現,其實漢諾塔的移動軌跡可以表示為二叉樹的中序遍歷路徑,當時一直想寫文章記下來,,然後拖到現在。
資料結構中的一種,每個結點最多有兩個子結點的樹結構。其中左子結點下面的子樹為左子樹,右子點結點的為右子樹。
二叉樹的遍歷是按照一定規則不重複的走遍所有結點。中序遍歷作為二叉樹的遍歷方式之一,這個過程是遞迴形式,其規則為:
中序遍歷左子樹
訪問根節點
中序遍歷右子樹
如上圖的遍歷順序為cbdafeg
漢諾塔之前寫過可以去看
這裡玩漢諾塔的三步可以和中序遍歷的三步對比。
1.【將n-1個圓盤從a移到】 ----> 【中序遍歷左子樹】[n-1(a)->b]
2.【將第n個圓盤移到c上】----> 【訪問根節點】[n(a)->c]
3.【將n-1個圓盤從b移到c】---> 【中序遍歷右子樹】[n-1(b)->c]
舉個例子:
將上圖的a上的四個方塊移到c上的移動路徑就可以表示為二叉樹:
這個二叉樹按照中序遍歷為: aibjhlkmcfdoern, 依次移動就可以將a上的四個移動到c上了。
漢諾塔與二叉樹
我相信很多朋友都知道漢諾塔問題,也有不少看過了它的程式實現,但我想有不少人不懂它是什麼意思,為什麼那幾行程式就把漢諾塔問題給解了呢?先囉嗦一會兒。解釋一下。漢諾塔是源自印度神話裡的玩具。上帝創造世界的時候做了三根金剛石柱子,在一根柱子上從下往上安大小順序摞著64片 圓盤。上帝命令婆羅門把圓盤從下面開...
漢諾塔(二) 思維
時間限制 3000 ms 記憶體限制 65535 kb 難度 5 描述漢諾塔的規則這裡就不再多說了,詳見題目 漢諾塔 一 現在假設規定要把所有的金片移動到第三個針上,給你任意一種處於合法狀態的漢諾塔,你能計算出從當前狀態移動到目標狀態所需要的最少步數嗎?輸入第一行輸入乙個整數n,表示測試資料的組數 ...
合併二叉樹 漢明距離 翻轉二叉樹
合併二叉樹 617合併二叉樹 definition for a binary tree node.struct treenode class solution else 同上 if t1 right null t2 right null else return t1 treenode mergetr...