二叉樹的非遞迴遍歷

2022-07-22 14:03:14 字數 669 閱讀 9952

遞迴轉非遞迴 幾乎都是用棧, 前序和中序遍歷比較簡單 ,後序遍歷稍麻煩;

1. 前序遍歷 :

void predis(node* head)         //

前序遍歷

if (!st.empty()) //

棧非空 }

}

2. 中序遍歷:唯一和前序不同的是訪問當前節點的時間

void middis(node* head)                   //

中序遍歷

if (!st.empty())

}}

3. 後序遍歷:

比前兩者都要麻煩的多,不過基本思路還是一樣的,就是訪問當前節點的時候,若當前節點沒有子樹,又或者當前節點的子樹都已經訪問過了,則可以訪問當前節點;

否則,將該節點的子樹壓棧(壓棧的順序是,先右子樹,後左子樹)

void posdis(node* head)                    //

後續

else

//當前節點有子樹 且沒有被訪問過

if (cur->lchild != null) //

左子樹進棧}}

}

二叉樹遍歷(遞迴 非遞迴)

二叉樹以及對二叉樹的三種遍歷 先根,中根,後根 的遞迴遍歷演算法實現,以及先根遍歷的非遞迴實現。node public class node public node left public node right public object value 遍歷訪問操作介面 public inte ce ...

二叉樹非遞迴遍歷

二叉樹非遞迴遍歷的幾個要點 1 不管前序 中序還是後序,它們的遍歷路線 或者說是回溯路線,先沿左邊一直走到盡頭,然後回溯到某節點,並跳轉到該節點的右孩子 如果有的話 然後又沿著這個有孩子的左邊一直走到盡頭 都是一樣的。2 明確每次回溯的目的。比如,前序回溯的目的是為了訪問右子樹 中序回溯的目的是為了...

非遞迴遍歷二叉樹

中序遞迴遍歷 void inordertrvdigui node pnode 然而,當樹的深度很大 比如16 時 假設為滿二叉樹 樹的節點數為 2 0 2 1 2 2 2 15 2 16 65536,遍歷整個二叉樹意味著有65536次函式呼叫,這將極大地增加程式執行時間。這時,應該採取非遞迴便利二叉...