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

十三、數(shù)據(jù)結(jié)構(gòu)——二叉樹的遍歷(先序、中序和后序)詳細思路和代碼

這篇具有很好參考價值的文章主要介紹了十三、數(shù)據(jù)結(jié)構(gòu)——二叉樹的遍歷(先序、中序和后序)詳細思路和代碼。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

二叉樹遍歷

在數(shù)據(jù)結(jié)構(gòu)中,二叉樹是一種常用且重要的數(shù)據(jù)結(jié)構(gòu)。二叉樹的遍歷是指按照一定順序訪問二叉樹的所有節(jié)點,常見的遍歷方式有前序遍歷、中序遍歷和后序遍歷。本文將詳細介紹這三種遍歷算法,并介紹最優(yōu)二叉樹。

二叉樹的基本定義

首先,我們先來了解一下二叉樹的基本定義。二叉樹是每個節(jié)點最多有兩個子節(jié)點的樹結(jié)構(gòu)。每個節(jié)點都可以有左子節(jié)點和右子節(jié)點,也可以沒有子節(jié)點。二叉樹可以為空,即沒有任何節(jié)點。

1、前序遍歷

前序遍歷是先訪問根節(jié)點,然后按照左子樹、右子樹的順序遞歸遍歷。前序遍歷的訪問順序為“根左右”。
十三、數(shù)據(jù)結(jié)構(gòu)——二叉樹的遍歷(先序、中序和后序)詳細思路和代碼,數(shù)據(jù)結(jié)構(gòu),數(shù)據(jù)結(jié)構(gòu),算法,c語言

代碼

void preOrderTraversal(TreeNode* root) {
    if (root == NULL) return;
    printf("%c ", root->data);
    preOrderTraversal(root->left);
    preOrderTraversal(root->right);
}

2、中序遍歷

中序遍歷是先按照左子樹的順序遞歸遍歷,然后訪問根節(jié)點,最后按照右子樹的順序遞歸遍歷。中序遍歷的訪問順序為“左根右”。
十三、數(shù)據(jù)結(jié)構(gòu)——二叉樹的遍歷(先序、中序和后序)詳細思路和代碼,數(shù)據(jù)結(jié)構(gòu),數(shù)據(jù)結(jié)構(gòu),算法,c語言

代碼

void inOrderTraversal(TreeNode* root) {
    if (root == NULL) return;
    inOrderTraversal(root->left);
    printf("%c ", root->data);
    inOrderTraversal(root->right);
}

3、后序遍歷

后序遍歷是先按照左子樹、右子樹的順序遞歸遍歷,然后訪問根節(jié)點。后序遍歷的訪問順序為“左右根”。
十三、數(shù)據(jù)結(jié)構(gòu)——二叉樹的遍歷(先序、中序和后序)詳細思路和代碼,數(shù)據(jù)結(jié)構(gòu),數(shù)據(jù)結(jié)構(gòu),算法,c語言

代碼

void postOrderTraversal(TreeNode* root) {
    if (root == NULL) return;
    postOrderTraversal(root->left);
    postOrderTraversal(root->right);
    printf("%c ", root->data);
}

全部代碼(這里是遞歸的方式,也可以是用隊列或者是棧來實現(xiàn),但是有點麻煩)

①tree.h

#ifndef _TREE_H_
#define _TREE_H_
#include <stdio.h>
#include <stdlib.h>

typedef struct TreeNode {
    char data;
    struct TreeNode* left;
    struct TreeNode* right;
} TreeNode;

//創(chuàng)建樹
TreeNode* createTree();

//先序
void preOrderTraversal(TreeNode* root);

//中序
void inOrderTraversal(TreeNode* root);

//后序
void postOrderTraversal(TreeNode* root);

#endif

②tree.c

#include "tree.h"
//創(chuàng)建樹
TreeNode* createTree() {
    char ch;
    scanf("%c", &ch);
    if (ch == '#') {
        return NULL;
    }

    TreeNode* newNode = (TreeNode*)malloc(sizeof(TreeNode));
    newNode->data = ch;
    newNode->left = createTree();
    newNode->right = createTree();

    return newNode;
}

//先序
void preOrderTraversal(TreeNode* root) {
    if (root == NULL) return;
    printf("%c ", root->data);
    preOrderTraversal(root->left);
    preOrderTraversal(root->right);
}

//中序
void inOrderTraversal(TreeNode* root) {
    if (root == NULL) return;
    inOrderTraversal(root->left);
    printf("%c ", root->data);
    inOrderTraversal(root->right);
}

//后序
void postOrderTraversal(TreeNode* root) {
    if (root == NULL) return;
    postOrderTraversal(root->left);
    postOrderTraversal(root->right);
    printf("%c ", root->data);
}

③tree_main.c

#include "tree.h"
#include "tree.c"
int main() {
    printf("輸入先序序列(包含null節(jié)點,使用#表示):\n");
    TreeNode* root = createTree();

    printf("構(gòu)造的二叉樹先序遍歷結(jié)果為:\n");
    preOrderTraversal(root);

    printf("\n構(gòu)造的二叉樹中序遍歷結(jié)果為:\n");
    inOrderTraversal(root);

    printf("\n構(gòu)造的二叉樹后序遍歷結(jié)果為:\n");
    postOrderTraversal(root);

    return 0;
}

運行結(jié)果

十三、數(shù)據(jù)結(jié)構(gòu)——二叉樹的遍歷(先序、中序和后序)詳細思路和代碼,數(shù)據(jù)結(jié)構(gòu),數(shù)據(jù)結(jié)構(gòu),算法,c語言
和上面我們畫圖連線是一樣的結(jié)果。

1、由先序和中序求后序

先序:A B C E F G H D I J K L M
中序:E C B G F H A J I K D M L
求后序?

十三、數(shù)據(jù)結(jié)構(gòu)——二叉樹的遍歷(先序、中序和后序)詳細思路和代碼,數(shù)據(jù)結(jié)構(gòu),數(shù)據(jù)結(jié)構(gòu),算法,c語言

2、由后序和中序求先序

中序:E C B G F H A J I K D M L
后序:E C G H F B J K I M L D A
求先序?

十三、數(shù)據(jù)結(jié)構(gòu)——二叉樹的遍歷(先序、中序和后序)詳細思路和代碼,數(shù)據(jù)結(jié)構(gòu),數(shù)據(jù)結(jié)構(gòu),算法,c語言文章來源地址http://www.zghlxwxcb.cn/news/detail-609713.html

到了這里,關(guān)于十三、數(shù)據(jù)結(jié)構(gòu)——二叉樹的遍歷(先序、中序和后序)詳細思路和代碼的文章就介紹完了。如果您還想了解更多內(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īng)查實,立即刪除!

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

相關(guān)文章

  • 【數(shù)據(jù)結(jié)構(gòu)】二叉樹的三種遍歷

    【數(shù)據(jù)結(jié)構(gòu)】二叉樹的三種遍歷

    目錄 一、數(shù)據(jù)結(jié)構(gòu) 二、二叉樹 三、如何遍歷二叉樹 數(shù)據(jù)結(jié)構(gòu)是計算機科學(xué)中用于組織和存儲數(shù)據(jù)的方式。它定義了數(shù)據(jù)元素之間的關(guān)系以及對數(shù)據(jù)元素的操作。常見的數(shù)據(jù)結(jié)構(gòu)包括數(shù)組、鏈表、棧、隊列、樹、圖等。 數(shù)組是一種線性數(shù)據(jù)結(jié)構(gòu),它使用連續(xù)的內(nèi)存空間存儲

    2024年02月21日
    瀏覽(21)
  • Java數(shù)據(jù)結(jié)構(gòu)——二叉樹的遍歷

    Java數(shù)據(jù)結(jié)構(gòu)——二叉樹的遍歷

    ?作者:敲代碼の流川楓 博客主頁:流川楓的博客 專欄:和我一起學(xué)java 語錄:Stay hungry stay foolish 工欲善其事必先利其器,給大家介紹一款超牛的斬獲大廠offer利器——牛客網(wǎng) 點擊注冊和我一起刷題 文章目錄 1.創(chuàng)建二叉樹 2.二叉樹的三種遍歷方式 3.代碼實現(xiàn)遍歷 前序遍歷

    2024年01月22日
    瀏覽(20)
  • 【數(shù)據(jù)結(jié)構(gòu)】二叉樹的層序遍歷

    【數(shù)據(jù)結(jié)構(gòu)】二叉樹的層序遍歷

    當(dāng)我們面對一個樹結(jié)構(gòu)時,常常需要對其進行遍歷以獲取其中的節(jié)點信息。其中一種常用的遍歷方式是層序遍歷,也稱為廣度優(yōu)先搜索(BFS)。本篇博客將詳細介紹層序遍歷的原理和實現(xiàn)方法。 層序遍歷以樹的根節(jié)點開始,按照從上到下、從左到右的順序逐層遍歷樹中的節(jié)點

    2024年02月03日
    瀏覽(34)
  • go數(shù)據(jù)結(jié)構(gòu)(二叉樹的遍歷)

    go數(shù)據(jù)結(jié)構(gòu)(二叉樹的遍歷)

    ? 用數(shù)組來存儲二叉樹如何遍歷的呢? 如果父節(jié)點的數(shù)組下表是i,那么它的左孩子就是i * 2 + 1,右孩子就是 i * 2 + 2。 ?二叉樹的遍歷方式: 二叉樹有 三種基本遍歷方式 ,分別是 前序遍歷、中序遍歷和后序遍歷 。遍歷的原理是從根節(jié)點開始,按照特定方式遞歸遍歷左子樹

    2023年04月15日
    瀏覽(22)
  • 數(shù)據(jù)結(jié)構(gòu)——二叉樹的創(chuàng)建與遍歷(鏈式存儲結(jié)構(gòu))

    數(shù)據(jù)結(jié)構(gòu)——二叉樹的創(chuàng)建與遍歷(鏈式存儲結(jié)構(gòu))

    二叉樹(binary tree)是指樹中節(jié)點的度不大于2的有序樹,它是一種最簡單且最重要的樹。二叉樹的遞歸定義為:二叉樹是一棵空樹,或者是一棵由一個根節(jié)點和兩棵互不相交的,分別稱作根的左子樹和右子樹組成的非空樹;左子樹和右子樹又同樣都是二叉樹。以下是對鏈式存

    2024年02月05日
    瀏覽(25)
  • 數(shù)據(jù)結(jié)構(gòu)——二叉樹的遍歷【前序、中序、后序】

    數(shù)據(jù)結(jié)構(gòu)——二叉樹的遍歷【前序、中序、后序】

    hello hello~ ,這里是大耳朵土土垚~???? ,歡迎大家點贊????關(guān)注????收藏?????? ?? 個人主頁:大耳朵土土垚的博客 ?? 所屬專欄:數(shù)據(jù)結(jié)構(gòu)學(xué)習(xí)筆記 、C語言系列函數(shù)實現(xiàn) ??對于數(shù)據(jù)結(jié)構(gòu)順序表、鏈表、堆有疑問的都可以在上面數(shù)據(jù)結(jié)構(gòu)的專欄進行學(xué)習(xí)哦~ 有問題可

    2024年03月15日
    瀏覽(30)
  • 【數(shù)據(jù)結(jié)構(gòu)】二叉樹的鏈式實現(xiàn)及遍歷

    【數(shù)據(jù)結(jié)構(gòu)】二叉樹的鏈式實現(xiàn)及遍歷

    后文所有代碼中的二叉樹結(jié)點: 前,中,后序遍歷都可以采用分治遞歸的思想解決,將根節(jié)點和它的孩子結(jié)點分別處理。 此處僅利用遞歸展開圖分析前序遍歷,中序和后序也是相同的思想: 層序遍歷需要利用隊列來進行,如果二叉樹跟結(jié)點不為空,則讓 指向它的一個指針入

    2024年02月07日
    瀏覽(24)
  • 【數(shù)據(jù)結(jié)構(gòu)】二叉樹的層序遍歷(四)

    【數(shù)據(jù)結(jié)構(gòu)】二叉樹的層序遍歷(四)

    ?目錄 一,層序遍歷概念 二,層序遍歷的實現(xiàn) ? ? ? ? 1,層序遍歷的實現(xiàn)思路 ????????2,創(chuàng)建隊列 ????????Queue.h ????????Queue.c ????????3,創(chuàng)建二叉樹 ????????BTree.h ????????BTree.c ????????4,層序遍歷的實現(xiàn) 層序遍歷:除了先序遍歷、中序遍歷、

    2024年02月07日
    瀏覽(24)
  • 【數(shù)據(jù)結(jié)構(gòu)】二叉樹的遍歷遞歸算法詳解

    【數(shù)據(jù)結(jié)構(gòu)】二叉樹的遍歷遞歸算法詳解

    我們來寫一個函數(shù) BuyNode(x)函數(shù) 用于創(chuàng)建二叉樹結(jié)點。 用動態(tài)開辟函數(shù) malloc 函數(shù)進行動態(tài)開辟,并強制轉(zhuǎn)換為 BTNode 型,用變量 node 來去管理開辟的空間。 我們初始化結(jié)點,其 val 即為傳入的參數(shù)x,左右指針 left 和 right 都設(shè)為NULL。 我們在主函數(shù)中創(chuàng)建上面這樣一顆二叉樹

    2024年01月20日
    瀏覽(31)
  • 【C語言 數(shù)據(jù)結(jié)構(gòu)】二叉樹的遍歷

    【C語言 數(shù)據(jù)結(jié)構(gòu)】二叉樹的遍歷

    所謂先序遍歷二叉樹,指的是從根結(jié)點出發(fā),按照以下步驟訪問二叉樹的每個結(jié)點: 訪問當(dāng)前結(jié)點; 進入當(dāng)前結(jié)點的左子樹,以同樣的步驟遍歷左子樹中的結(jié)點; 遍歷完當(dāng)前結(jié)點的左子樹后,再進入它的右子樹,以同樣的步驟遍歷右子樹中的結(jié)點; 先序遍歷這棵二叉樹的過

    2024年02月04日
    瀏覽(22)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包