複習筆記 二叉樹的前中後非遞迴遍歷演算法

2021-08-05 21:18:00 字數 766 閱讀 6560

前序遍歷

思路:全域性指標,指向根節點,所到節點立即訪問,然後把節點入棧,往左走。

當左子樹為空時,pop棧頂節點,如果棧頂右子樹不空,把全域性指標往右走,繼續迴圈。

迴圈結束條件:棧為空並且全域性指標為null時。

public static void preite(treenode root)else

} }

中序遍歷

思路:全域性指標,初始指向根節點,迴圈入棧,直到全域性指標的左子樹為空。

pop棧頂節點並訪問,如果棧頂節點的右子樹不為空,則全域性指標往右走,繼續迴圈。

迴圈結束條件:棧空或者全域性指標為null時。

public static void midite(treenode root)

if(!stack.isempty())

} }

後序遍歷

如果全域性指標現在指向的節點沒有左右孩子 或者 全域性指標指向的節點的左孩子或者右孩子是上一次遍歷的節點,則

遍歷當前節點,並出棧,同時上一次遍歷的節點指向此節點。否則,當前節點的右孩子若不為空,右孩子入棧,當前節點的左孩子不為空,左孩子入棧。

迴圈結束條件:棧空。

public static void postite(treenode root)else

} }

二叉樹的前中後序非遞迴 複習

注意 不是二叉排序樹,只是普通的二叉樹。相信二叉樹的遞迴遍歷對於很多人來說是很容易的,但這裡要複習下非遞迴的實現。前序和中序的非遞迴遍歷相對容易一些,前序是從根到左子樹不停的訪問然後入棧,等左子樹遍歷到空時,出棧,再指向它的右子樹,按照之前的規律入棧,一直執行。而中序略微變化一下,在入棧時先不訪問,...

二叉樹的前中後遍歷遞迴非遞迴實現

好吧,我終於把前中後 遞迴和非遞迴的都寫出來了。如下 不解釋 include includeusing namespace std struct btnode void assertbtn btnode root1,int a else 非遞迴前序遍歷 stack s pre void preord...

二叉樹遍歷實現(前中後層次 遞迴非遞迴)

一.前序遍歷 include include includeusing namespace std struct binarytreenode 遞迴實現 void preorder1 binarytreenode proot if proot m pright nullptr 非遞迴實現 void ...