国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

數(shù)據(jù)結(jié)構(gòu)—基礎(chǔ)知識(11):二叉樹的遍歷

這篇具有很好參考價值的文章主要介紹了數(shù)據(jù)結(jié)構(gòu)—基礎(chǔ)知識(11):二叉樹的遍歷。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

數(shù)據(jù)結(jié)構(gòu)—基礎(chǔ)知識(11):二叉樹的遍歷

二叉樹的遍歷

二叉樹的遍歷是指按某條搜索路徑訪問樹中每個結(jié)點,使得每個結(jié)點均被訪問一次,而且僅被訪問一次。由于二叉樹是一種非線性結(jié)構(gòu),每個結(jié)點都可能有兩棵子樹,因而需要尋找一種規(guī)律,以便使二叉樹上的結(jié)點能排列在一個線性隊列上,進(jìn)而便于遍歷。
由二叉樹的遞歸定義可知,遍歷一棵二叉樹便要決定對根結(jié)點N、左子樹L和右子樹R的訪問順序。按照先遍歷左子樹再遍歷右子樹的原則,常見的遍歷次序有先序(NLR)、中序(LNR)和后序(LRN)三種遍歷算法,其中“序”指的是根結(jié)點在何時被訪問。
數(shù)據(jù)結(jié)構(gòu)—基礎(chǔ)知識(11):二叉樹的遍歷,數(shù)據(jù)結(jié)構(gòu)基礎(chǔ)知識、概念,數(shù)據(jù)結(jié)構(gòu),筆記,經(jīng)驗分享,考研

先序遍歷:ABCDEFGH
中序遍歷:BDCEAFHG
后序遍歷:DECBHGFA

  1. 先序遍歷

    先序遍歷的操作過程如下:

    若二叉樹為空則什么都不做;否則,①訪問根節(jié)點;②先序遍歷左子樹;③先序遍歷右子樹。

    對應(yīng)的遞歸算法:

    void PreOrder(BinTree T)
    {//先序遍歷的遞歸算法
        if(T!=NULL)
        {
            visit(T);//訪問根結(jié)點
            PreOrder(T->lchild);//遞歸遍歷左子樹
            PreOrder(T->rchild);//遞歸遍歷右子樹
        }
    }
    

    先序遍歷的非遞歸算法:

    void PreOrder2(BinTree T)
    {//先序遍歷的非遞歸算法
        InitStack(S);BiTree p=T;//初始化棧S;p是遍歷指針
        while(p||!IsEmpty(S))//棧不空或p不空時循環(huán)
        {
            if(p){//一路向左
                visit(p);Push(S,p);//訪問當(dāng)前結(jié)點,并入棧
                p=p->lchild;//左孩子不空,一直向左走
            }
            else{//出棧,并轉(zhuǎn)向出棧結(jié)點的右子樹
                Pop(S,p);//棧頂元素出棧
                p=p->rchild;//向右子樹走,p賦值為當(dāng)前結(jié)點的右子樹
            }//返回while循環(huán)繼續(xù)進(jìn)入if-else語句
        }
    }
    
  2. 中序遍歷

    中序遍歷的操作過程如下:

    若二叉樹為空則什么都不做;否則,①先序遍歷左子樹;②訪問根節(jié)點;③先序遍歷右子樹。

    對應(yīng)的遞歸算法:

    void InOrder(BinTree T)
    {//中序遍歷的遞歸算法
        if(T!=NULL)
        {
            InOrder(T->lchild);//遞歸遍歷左子樹
            visit(T);//訪問根結(jié)點
            InOrder(T->rchild);//遞歸遍歷右子樹
        }
    }
    

    中序非遞歸遍歷

    void InOrder2(BiTree T)
    {
        InitStack(S); BiTree p=T;//初始化棧S;p是遍歷指針
        while(p||!IsEmpty(S))//棧不空或p不空時循環(huán)
        {
            if(p){//一路向左
                Push(S,p);//當(dāng)前結(jié)點入棧
                p=p->1child;//左孩子不空,一直向左走
            } 
            else{//出棧,并轉(zhuǎn)向出棧結(jié)點的右子樹
                Pop(S,p);visit(p);//棧頂元素出棧,訪問出棧結(jié)點
                p=p->rchild;//向右子樹走,p賦值為當(dāng)前結(jié)點的右孩子
            }//返回 while 循環(huán)繼續(xù)進(jìn)入if-else語句
        }
    }
    
    
  3. 后序遍歷

    后序遍歷的操作過程如下:

    若二叉樹為空則什么都不做;否則,①先序遍歷左子樹;②先序遍歷右子樹;③訪問根節(jié)點。

    對應(yīng)的遞歸算法:

    void PostOrder(BinTree T)
    {//后序遍歷的遞歸算法
        if(T!=NULL)
        {
            PostOrder(T->lchild);//遞歸遍歷左子樹
            PostOrder(T->rchild);//遞歸遍歷右子樹
            visit(T);//訪問根結(jié)點
        }
    }
    

    后序遍歷的非遞歸算法:文章來源地址http://www.zghlxwxcb.cn/news/detail-827589.html

    void PostOrder (BiTree T)
    {
        InitStack(S);
        BiTNode *p=T;
        BiTNode *r=NULL;
        while(p||!IsEmpty(S))
        {
            if(p){//走到最左邊
                push(S,p);
                p=p->lchild;
            }
            else{//向右
                GetTop(S,p);//讀棧頂結(jié)點(非出棧)
                if(p->rchild&&p->rchild!=r)//若右子樹存在,且未被訪問過
                    p=p->rchild;//轉(zhuǎn)向右
                else{//否則,彈出結(jié)點并訪問
                    pop(S,p);//將結(jié)點彈出
                    visit(p->data);//訪問該結(jié)點
                    r=p;//記錄最近訪問過的結(jié)點
                    p=NULL;//結(jié)點訪問完后,重置p指針
                }
            }//else
        }//while
    }
    

到了這里,關(guān)于數(shù)據(jù)結(jié)構(gòu)—基礎(chǔ)知識(11):二叉樹的遍歷的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 探索樹形數(shù)據(jù)結(jié)構(gòu),通識樹、森林與二叉樹的基礎(chǔ)知識(專有名詞),進(jìn)一步利用順序表和鏈表表示、遍歷和線索樹形結(jié)構(gòu)

    探索樹形數(shù)據(jù)結(jié)構(gòu),通識樹、森林與二叉樹的基礎(chǔ)知識(專有名詞),進(jìn)一步利用順序表和鏈表表示、遍歷和線索樹形結(jié)構(gòu)

    ? 結(jié)點之間有分支,具有層次關(guān)系 樹的定義 : 樹 (tree)是n(n≥0)個有限集。 若n = 0,則稱為空樹; 若n 0,則它滿足如下兩個條件: 有且僅有一個特定的稱為根(Root)的結(jié)點; 其余結(jié)點可分為m(m≥0)個互不相交的有限集T1,T2,T3,.....,Tm,其中每一個集合本身又是一棵樹,并稱為根的

    2024年02月01日
    瀏覽(100)
  • 數(shù)據(jù)結(jié)構(gòu)--基礎(chǔ)知識

    數(shù)據(jù)結(jié)構(gòu)--基礎(chǔ)知識

    數(shù)據(jù)結(jié)構(gòu)是計算機(jī)科學(xué)中研究數(shù)據(jù)組織、存儲和管理的方法和原則。它涉及存儲和操作數(shù)據(jù)的方式,以便能夠高效地使用和訪問數(shù)據(jù)。 數(shù)組(Array):數(shù)組是一種線性數(shù)據(jù)結(jié)構(gòu),由相同類型的元素按順序排列而成。數(shù)組具有固定長度,在內(nèi)存中占據(jù)連續(xù)的位置??梢酝ㄟ^索引

    2024年02月14日
    瀏覽(17)
  • 數(shù)據(jù)結(jié)構(gòu)|基礎(chǔ)知識定義

    1.值傳遞、地址傳遞、值返回、地址返回 1 值傳遞 :普通變量作為函數(shù)參數(shù)傳遞是單向的值傳遞,只是將實參的值復(fù)制一份給形參變量,形參的改變不會影響實參的值,因為所在內(nèi)存空間不同 如果傳遞的是地址,被調(diào)函數(shù)使用指針接收,如果在被調(diào)函數(shù)中,沒有更改指針指向

    2024年02月08日
    瀏覽(26)
  • 數(shù)據(jù)結(jié)構(gòu)基礎(chǔ)知識、名詞概述

    數(shù)據(jù)結(jié)構(gòu)基礎(chǔ)知識、名詞概述

    整體知識框架 1.1.1 數(shù)據(jù)、 數(shù)據(jù)元素、 數(shù)據(jù)項和數(shù)據(jù)對象 數(shù)據(jù) (Data) 是客觀事物的符號表示,是所有 能輸入到計算機(jī)中并被計算機(jī)程序處理的符號 的總稱 。如數(shù)學(xué)計算中用到的整數(shù)和實數(shù),文本編輯中用到的字符串,多媒體程序處理的圖形、 圖像、聲音及動畫等通過特殊編

    2024年02月15日
    瀏覽(22)
  • 數(shù)據(jù)結(jié)構(gòu)—基礎(chǔ)知識:哈夫曼樹

    數(shù)據(jù)結(jié)構(gòu)—基礎(chǔ)知識:哈夫曼樹

    哈夫曼(Huffman)樹 又稱最優(yōu)樹,是一類帶權(quán)路徑長度最短的樹,在實際中有廣泛的用途。哈夫曼樹的定義,涉及路徑、路徑長度、權(quán)等概念,下面先給出這些概念的定義,然后再介紹哈夫曼樹 路徑 :從樹中一個結(jié)點到另一個結(jié)點之間的分支構(gòu)成這兩個結(jié)點之間的路徑。 路

    2024年02月21日
    瀏覽(19)
  • 【數(shù)據(jù)結(jié)構(gòu)】樹的基礎(chǔ)知識及三種存儲結(jié)構(gòu)

    【數(shù)據(jù)結(jié)構(gòu)】樹的基礎(chǔ)知識及三種存儲結(jié)構(gòu)

    ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ???? ?? ?? ?? 個人主頁 :阿然成長日記 ??點擊可跳轉(zhuǎn) ?? 個人專欄: ??數(shù)據(jù)結(jié)構(gòu)與算法??C語言進(jìn)階 ?? 不能則學(xué),不知則問,恥于問人,決無長進(jìn) ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? 把它叫做樹是因為它

    2024年02月09日
    瀏覽(27)
  • 數(shù)據(jù)結(jié)構(gòu)—基礎(chǔ)知識(15):哈夫曼樹

    數(shù)據(jù)結(jié)構(gòu)—基礎(chǔ)知識(15):哈夫曼樹

    哈夫曼(Huffman)樹 又稱最優(yōu)樹,是一類帶權(quán)路徑長度最短的樹,在實際中有廣泛的用途。哈夫曼樹的定義,涉及路徑、路徑長度、權(quán)等概念,下面先給出這些概念的定義,然后再介紹哈夫曼樹 路徑 :從樹中一個結(jié)點到另一個結(jié)點之間的分支構(gòu)成這兩個結(jié)點之間的路徑。 路

    2024年02月19日
    瀏覽(23)
  • 【數(shù)據(jù)結(jié)構(gòu)】C--單鏈表(小白入門基礎(chǔ)知識)

    【數(shù)據(jù)結(jié)構(gòu)】C--單鏈表(小白入門基礎(chǔ)知識)

    前段時間寫了一篇關(guān)于順序表的博客,http://t.csdn.cn/0gCRp 順序表在某些時候存在著一些不可避免的缺點: 問題: 1. 中間 / 頭部的插入刪除,時間復(fù)雜度為 O(N) 2. 增容需要申請新空間,拷貝數(shù)據(jù),釋放舊空間。會有不小的消耗。 3. 增容一般是呈 2 倍的增長,勢必會有一定的空間

    2024年02月16日
    瀏覽(22)
  • 【數(shù)據(jù)結(jié)構(gòu)】棧和隊列(棧的基本操作和基礎(chǔ)知識)

    【數(shù)據(jù)結(jié)構(gòu)】棧和隊列(棧的基本操作和基礎(chǔ)知識)

    ??個人主頁: 秦jh__ https://blog.csdn.net/qinjh_?spm=1010.2135.3001.5343 ???系列專欄: 《數(shù)據(jù)結(jié)構(gòu)》 https://blog.csdn.net/qinjh_/category_12536791.html?spm=1001.2014.3001.5482 目錄 ?前言 棧 棧的概念和結(jié)構(gòu) 棧的實現(xiàn) ?編輯 數(shù)組棧的實現(xiàn) 總的聲明 初始化 ?插入 刪除 取棧頂元素 銷毀 判斷是否為空

    2024年02月03日
    瀏覽(20)
  • 【數(shù)據(jù)結(jié)構(gòu)】—— 隊列基礎(chǔ)知識以及數(shù)組模擬隊列的分析、演示及優(yōu)化

    【數(shù)據(jù)結(jié)構(gòu)】—— 隊列基礎(chǔ)知識以及數(shù)組模擬隊列的分析、演示及優(yōu)化

    ??一名熱愛Java的大一學(xué)生,希望與各位大佬共同學(xué)習(xí)進(jìn)步?? ??個人主頁:@周小末天天開心 各位大佬的點贊?? 收藏? 關(guān)注?,是本人學(xué)習(xí)的最大動力 感謝! ??該篇文章收錄專欄—數(shù)據(jù)結(jié)構(gòu) 目錄 什么是隊列? 數(shù)組模擬隊列 分析 存入隊列的步驟 使用數(shù)組模擬隊列—

    2024年01月19日
    瀏覽(22)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包