二叉树前序、中序和后序遍历的非递归实现
1 二叉樹(shù)的遍歷
1.1 前序遍歷
對(duì)于每棵子樹(shù),先處理根,然后處理左子樹(shù),最后處理右子樹(shù)。根最先訪問(wèn),所以是前序遍歷。
1.2 中序遍歷
對(duì)于每棵子樹(shù),先處理左子樹(shù),然后處理根,最后處理右子樹(shù)。根中間訪問(wèn),所以是中序遍歷。
1.3 后序遍歷
對(duì)于每棵子樹(shù),先處理左子樹(shù),然后處理右子樹(shù),最后處理根。根最后訪問(wèn),所以是后序遍歷。
2 二叉樹(shù)的中序遍歷的非遞歸實(shí)現(xiàn)
第一,用棧實(shí)現(xiàn);
第二,每個(gè)元素都要入棧;
第三,每當(dāng)有新的元素入棧了,都要檢查棧頂元素是不是可以出棧了。
第四,可以出棧的條件:
??????? 1, 它的左兒子為NULL
??????? 2, 剛進(jìn)行了一次出棧操作,現(xiàn)在它是新的棧頂元素,這個(gè)時(shí)候就證明它的左子樹(shù)已經(jīng)被訪問(wèn)完了,現(xiàn)在輪到它了。
3 二叉樹(shù)的后序遍歷的非遞歸實(shí)現(xiàn)
入棧:
第一,root無(wú)條件入棧
第二,latest_poped為NULL時(shí),左孩子不為null,左孩子入棧;左孩子為null,右孩子不為null,右孩子入棧;
第三,latest_poped不為null時(shí):
??????? latest_poped是左孩子時(shí),右孩子不為null,右孩子入棧;
??????? latest_poped不是孩子時(shí),左孩子不為null,左孩子入棧;左孩子為null,右孩子不為null,右孩子入棧;
出棧:
第一,葉子出棧
第二,latest_poped是右孩子時(shí),出棧
第三,latest_poped是左孩子,并且右孩子為null,出棧。
?
轉(zhuǎn)載于:https://www.cnblogs.com/hustdc/p/7767883.html
總結(jié)
以上是生活随笔為你收集整理的二叉树前序、中序和后序遍历的非递归实现的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: SEO之面包屑导航
- 下一篇: 设计算法时要确保分类讨论的完备性