前序遍歷
思路:全域性指標,指向根節點,所到節點立即訪問,然後把節點入棧,往左走。
當左子樹為空時,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 ...