今天碰到了這道題,寫一下怎麼實現樹的前序遍歷而不使用遞迴。
在我之前的部落格中曾經寫過,雖然遞迴和非遞迴有著緊密的聯絡(比如思想上),但是兩者在編寫上依然有很大差別。——主要體現在遞迴可以使用所謂整體法,而如果使用非遞迴的話用整體法很難想。
如果使用非遞迴的話怎麼搞呢?我們只能先通過模擬,摸清大概是怎麼做的,然後再來談具體的實現。
談到遞迴,不得不談到棧這個資料結構——我們遞迴要從遞迴函式中返回,等價於出棧這個操作——同樣的,在非遞迴的寫法中我們完全可以引入棧,當搜尋完畢時出棧,直到棧頂元素是我們待處理的下乙個元素。
有以上的理論基礎,我們的思路就比較清晰了:
/**
* definition for a binary tree node.
* struct treenode
* };
*/// 樹的左子樹和右子樹都是鍊錶的形式
class solution
// 進入右子樹
if (!s.empty())
}return res;
}};
二叉樹遍歷非遞迴寫法
資料結構考試前閒的蛋疼,整理課本。結點建立 struct node node root 中序遍歷 模擬深搜過程,在第一次回溯的時候輸出,即為中序遍歷 1 stackq1 2 node pre root 3while 1 4 10 一直往左走 11do 12while pre right null q...
二叉樹的非遞迴前序遍歷
二叉樹的非遞迴前序遍歷,需要借助棧 棧又是由順序表實現的 順序表的實現 首先我們需要乙個二叉樹 通過前序遍歷的陣列 abd gi j ce hk f 構建二叉樹 之前我們已經有二叉樹遞迴版的前序,中序,後序遍歷 通過前序遍歷的陣列 abd gi j ce hk f 構建二叉樹,並得到二叉樹的前序遍歷...
二叉樹的前序非遞迴遍歷
include 二叉樹的先序遞迴遍歷 include include 假定利用陣列a n 順序儲存乙個棧,用top 表示棧頂指標,top 1表示棧空,已知棧未滿,當元素x進棧時的操作為 x b.a top x c.a top x d.a top x top是先 1再運算,所以是從0開始的 而top ...