遞歸和非遞歸

二叉樹的遍歷中

  • 有兩種實現(xiàn)
  • 遞歸
  • 非遞歸(迭代)

事實上,在解決一些問題的時候,經(jīng)常使用到遞歸函數(shù)饱亿。
萬一哪天為了追求效率,非要寫迭代呢闰靴。

迭代就是:

考慮彪笼,遞歸其實是讓系統(tǒng)來做棧的操作。
所以迭代蚂且,其實配猫,就是我們來做系統(tǒng)本來要做的事情。

系統(tǒng)對于一個函數(shù)入棧會存儲哪些東西杏死?

  • 正在操作的數(shù)據(jù)
  • PC
  • 返回指針

我們需要的是:正在 ** 操作的數(shù)據(jù)泵肄,PC**,記錄當前程序運行到哪個位置淑翼,以確定下一步做什么腐巢。

但是往往,PC 不需要被記錄玄括。

例子

#前序遍歷冯丙,中序遍歷,后續(xù)遍歷

后面會聊下后續(xù)吧
static void swap(int[] array,int i,int mark){
    if(i!=mark) {
        int tmp = array[i];
        array[i] = array[mark];
        array[mark] = tmp;
    }
}
#快速排序
    //常見的快速排序實現(xiàn)
    static void quick_sort(int array[],int start,int end){
        if(end<=start){return;}
        int middle = array[start];
        int mark =start;
        for(int i=start+1;i< end+1;i++){
            if(array[i] < middle){
                swap(array,i,mark+1);
                mark++;
            }
        }
        swap(array,start,mark);
        quick_sort(array,start,mark-1);
        quick_sort(array,mark+1,end);
    }

#一個非遞歸的快速排序
static class QS{
    int start,end;
    int pc;
    QS(int start,int end){
        this.start=start;
        this.end = end;
    }
}//可以注意到遭京,存儲的就是傳入的操作數(shù)胃惜。
//其他的數(shù)泞莉,在每一輪里面都是由這兩個數(shù)來決定的,所以這里只存儲兩個數(shù)

#不知道還有沒有別的情況船殉,但是至少遍歷和這個都是存儲的鲫趁,遞歸中的
#輸入?yún)?shù)

    static void qs2(int array[]){
        Stack<QS> stack =new Stack<QS>();
        QS node = new QS(0,array.length-1);
        while(!stack.isEmpty()|| node!=null){

            while(node.end<=node.start){
                if(!stack.isEmpty())
                    node=stack.pop();
                else{
                    return;
                }
            }
            int middle = array[node.start];
            int mark = node.start;
            for(int i=node.start + 1;i< node.end + 1;i++){
                if(array[i] < middle){
                    swap(array,i,mark + 1);
                    mark ++;
                }
            }
            swap(array,node.start,mark);
            stack.push(new QS(mark+1,node.end));
            node = new QS(node.start,mark-1);

        }
    }
#關于非遞歸的后序遍歷
偽代碼:

void post(Node node){
    post(node.left);
    post(node.right);
    node.print();
}
void postTravel(Node node){
    while(node!=null){
        Stack.push(node);
        node =node.left;
    }
    node.pop();
    if(pc==1){//壓入的位置
        node.Sprint
    }else{
        node.push(node);
        node=node.right;
    }
}


什么時候要用PC

為什么前序和中序遍歷,不需要用PC呢利虫?
而后序要挨厚。
看了前序,中序糠惫,后序的遞歸函數(shù)疫剃,沒有看出什么差別。

差別就在于stack.pop()之后的操作有幾種寞钥。
前序和中序慌申,pop()之后都是直接打印出來,后面操作只有一種理郑。
{
1.打印出來
}
但是后序蹄溉,pop()的時候,有兩種情況
{
1.node=node.right
2.node打印出來
}

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末您炉,一起剝皮案震驚了整個濱河市柒爵,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌赚爵,老刑警劉巖棉胀,帶你破解...
    沈念sama閱讀 222,464評論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異冀膝,居然都是意外死亡唁奢,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,033評論 3 399
  • 文/潘曉璐 我一進店門窝剖,熙熙樓的掌柜王于貴愁眉苦臉地迎上來麻掸,“玉大人,你說我怎么就攤上這事赐纱〖狗埽” “怎么了?”我有些...
    開封第一講書人閱讀 169,078評論 0 362
  • 文/不壞的土叔 我叫張陵疙描,是天一觀的道長诚隙。 經(jīng)常有香客問我,道長起胰,這世上最難降的妖魔是什么久又? 我笑而不...
    開封第一講書人閱讀 59,979評論 1 299
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上籽孙,老公的妹妹穿的比我還像新娘烈评。我一直安慰自己火俄,他們只是感情好犯建,可當我...
    茶點故事閱讀 69,001評論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著瓜客,像睡著了一般适瓦。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上谱仪,一...
    開封第一講書人閱讀 52,584評論 1 312
  • 那天玻熙,我揣著相機與錄音,去河邊找鬼疯攒。 笑死嗦随,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的敬尺。 我是一名探鬼主播枚尼,決...
    沈念sama閱讀 41,085評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼砂吞!你這毒婦竟也來了署恍?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 40,023評論 0 277
  • 序言:老撾萬榮一對情侶失蹤蜻直,失蹤者是張志新(化名)和其女友劉穎盯质,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體概而,經(jīng)...
    沈念sama閱讀 46,555評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡呼巷,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,626評論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了赎瑰。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片王悍。...
    茶點故事閱讀 40,769評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖乡范,靈堂內(nèi)的尸體忽然破棺而出配名,到底是詐尸還是另有隱情,我是刑警寧澤晋辆,帶...
    沈念sama閱讀 36,439評論 5 351
  • 正文 年R本政府宣布渠脉,位于F島的核電站,受9級特大地震影響瓶佳,放射性物質(zhì)發(fā)生泄漏芋膘。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 42,115評論 3 335
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望为朋。 院中可真熱鬧臂拓,春花似錦、人聲如沸习寸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,601評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽霞溪。三九已至孵滞,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間鸯匹,已是汗流浹背坊饶。 一陣腳步聲響...
    開封第一講書人閱讀 33,702評論 1 274
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留殴蓬,地道東北人匿级。 一個月前我還...
    沈念sama閱讀 49,191評論 3 378
  • 正文 我出身青樓,卻偏偏與公主長得像染厅,于是被迫代替她去往敵國和親痘绎。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,781評論 2 361

推薦閱讀更多精彩內(nèi)容