資料結構 BFS層次遍歷二叉樹【C語言版本】
//案例輸入(其中的“#”表示空,並且輸入過程中不要加回車)
輸入序列ABC##DE#G##F###
輸入序列ABD##E##CF#G###
輸入序列ABD###C##
#include <stdio.h> //測試OK,可以執行 #include <stdlib.h> typedef struct BiTNode //定義樹的結構 { char data; struct BiTNode *Lchild; struct BiTNode *Rchild; } BiTNode,*BiTree; BiTree Create(BiTree T) //建立二叉樹(先序) //改的這個地方 { char ch; ch=getchar(); if(ch=='#') T = NULL; else { if(!(T=(BiTNode *)malloc(sizeof(BiTNode)))) printf("Error!"); T->data=ch; T->Lchild = Create(T->Lchild); T->Rchild = Create(T->Rchild); } return T; } typedef BiTree QueueElementType ; typedef struct Node{ QueueElementType data; Node *next; }LinkQueueNode; typedef struct { LinkQueueNode *Front; LinkQueueNode *Rear; }LinkQueue; //鏈 佇列 初始化 int init_Queue(LinkQueue *Q) { Q->Front = (LinkQueueNode *)malloc(sizeof(LinkQueueNode)); if(Q->Front !=NULL){ Q->Rear = Q->Front; Q->Front->next = NULL; return 1; } else return 0; //溢位 } //鏈 佇列 入隊 int EnterQueue(LinkQueue *Q,QueueElementType x) { LinkQueueNode *NewNode; NewNode = (LinkQueueNode *)malloc(sizeof(LinkQueueNode)); if(NewNode !=NULL){ NewNode->data = x; NewNode->next = NULL; Q->Rear->next =NewNode; Q->Rear =NewNode; return 1; } else return 0; } //鏈佇列 出隊 int Delete_Queue(LinkQueue *Q,QueueElementType *x) { if(Q->Front == Q->Rear){ return 0; } LinkQueueNode *p; p = Q->Front->next; Q->Front->next = p->next; if(Q->Rear == p){ Q->Rear = Q->Front; } *x = p->data; free(p); return 1; } //判斷 佇列是否為空 int Is_empty(LinkQueue *Q) { if(Q->Front == Q->Rear) return 1; return 0; } //層次 遍歷樹 (OK) void BFS_Queue(BiTree T) { if(T == NULL) return; LinkQueue LQ; init_Queue(&LQ); EnterQueue(&LQ,T); BiTree temp; while( !Is_empty(&LQ) ) { if( Delete_Queue(&LQ,&temp) ) printf("%c ",temp->data); if(temp->Lchild) EnterQueue(&LQ,temp->Lchild); //這個位置原來都是 T->Lchild 怪不得呢 if(temp->Rchild) EnterQueue(&LQ,temp->Rchild); } printf("\n"); } int main() { printf("下面用先序遍歷建立二叉樹:"); printf("請輸入樹 的內容,形式如ABD##E##CF#G###('#'代表空): \n\n"); BiTree T=Create(T); //建立樹 printf("\n\n下面輸出 層次遍歷的結果 (每一層的結點都是從左向右的順序輸出):\n"); BFS_Queue(T); //層次 遍歷 樹 return 0; }
相關推薦
資料結構 BFS層次遍歷二叉樹【C語言版本】
//案例輸入(其中的“#”表示空,並且輸入過程中不要加回車) 輸入序列ABC##DE#G##F### 輸入序列ABD##E##CF#G### 輸入序列ABD###C## #include <stdio.h> //測試OK,可以執行 #include <s
C++資料結構--按層次遍歷二叉樹
class node { public: T val; //節點值 node<T>* left; //左節點 node<T>* right; //右節點 node():val(T()),left(nullptr),right(nullptr){} node(T v,
資料結構知識整理 - 遍歷二叉樹的應用
主要內容 建立二叉連結串列 複製二叉樹 計算二叉樹深度 統計二叉樹的結點個數 建立二叉連結串列 在先序遍歷的遞迴演算法中,將輸出語句改為輸入語句即可。(可回顧“遞迴演算法”) 需要注意的是,遞迴演算法會遍歷滿二叉樹中的每一個結點,
資料結構-----後序遍歷二叉樹非遞迴演算法(利用堆疊實現)
一、非遞迴後序遍歷演算法思想 後序遍歷的非遞迴演算法中節點的進棧次數是兩個,即每個節點都要進棧兩次,第二次退棧的時候才訪問節點。 第一次進棧時,在遍歷左子樹的過程中將"根"節點進棧,待左子樹訪問完後,回溯的節點退棧,即退出這個"根"節點,但不能立即訪問,只能藉助於這個"根"
【劍指offer】從上往下列印二叉樹,層次遍歷二叉樹【python】
題目描述 從上往下打印出二叉樹的每個節點,同層節點從左至右列印。 採用佇列的思想,出佇列則列印,然後左節點右節點分別入佇列 注意如果需要兩個不同的列表,一定不能用list = result = []這樣
資料結構-從底向上層次遍歷二叉樹
【題目來自灰灰考研】 二叉樹採用二叉連結串列進行儲存(如下所示),每個結點包含資料域Data,左孩子指標域left和右孩子指標域right。請設計演算法給定一顆樹,返回其節點值從底向上的層次序遍歷(按從葉節點所在層到根節點所在的層遍歷,然後逐層從左往右遍歷)。 Typed
leet code Binary Tree Level Order Traversal II 層次遍歷二叉樹
leet code 題目:https://leetcode.com/problems/binary-tree-level-order-traversal-ii/ 層次遍歷二叉樹: 思路:使用佇列層次遍歷二叉樹, 考點: 1.使用佇列,先彈出佇列對頭,把隊頭元素的左節點和右節點加入佇列
層次遍歷二叉樹和採用棧的方式遍歷二叉樹
//中序遍歷非遞迴 @Override public void inOrderByStack() { System.out.println("中序遍歷非遞迴操作"); //建立棧 Deque<Node> stack=new LinkedList&
層次遍歷二叉樹以及遍歷第K層二叉樹
層次遍歷的時候用到了,STL中的佇列。 void LevelOrder(BtNode *ptr) { queue<BtNode*> que; que.push(ptr); while (!que.empty()) {
層次遍歷二叉樹-三種不同的方法
給定一棵二叉樹,要求進行分層遍歷,每層的節點值單獨列印一行,下圖給出事例結構: 對此二叉樹遍歷的結果應該是: 1, 2 , 3 4, 5, 6 7, 8 第一種方法,就是利用遞迴的方法,按層進行列印,我們把根節點當做第0層,之後層次依次增加,如果我們想列印第二層怎麼辦呢,
按層次遍歷二叉樹演算法
問題:按層次遍歷二叉樹 在網上看了一些按層次遍歷二叉樹的演算法,這裡修改了一下通過佇列來按層次遍歷二叉樹的演算法 -------------------------------------------
力扣算法題—094中序遍歷二叉樹【】
中序 非遞歸 輸入 root urn clas 進階 else oid 給定一個二叉樹,返回它的中序 遍歷。 示例: 輸入: [1,null,2,3] 1 2 / 3 輸出: [1,3,2] 進階: 遞歸算法很簡單,
資料結構基礎 層次遍歷和中序遍歷還原二叉樹
【問題描述】 給出一個層次遍歷,和一箇中序遍歷的結果字串 層次 A B C D E F G 中序 D B A F E G C 其對應的二叉樹是: A / / B C / / D E / /
資料結構與演算法隨筆之------二叉樹的遍歷(一文搞懂二叉樹的四種遍歷)
二叉樹的遍歷 二叉樹的遍歷(traversing binary tree)是指從根結點出發,按照某種次序依次訪問二叉樹中所有的結點,使得每個結點被訪問依次且僅被訪問一次。 遍歷分為四種,前序遍歷,中序遍歷,後序遍歷及層序遍歷 前序 中
資料結構實驗之二叉樹二:遍歷二叉樹 SDUT 3341
#include <bits/stdc++.h> using namespace std; struct Tree { char data; struct Tree *right; struct Tree *left; }; char str[55]; in
SDUTOJ1291資料結構上機測試4.1:二叉樹的遍歷與應用1
以SDUTOJ1291資料結構上機測試4.1:二叉樹的遍歷與應用1為例 https://acm.sdut.edu.cn/onlinejudge2/index.php/Home/Contest/contestproblem/cid/2711/pid/1291 思路: 遞迴實現,化解子問
資料結構--遍歷二叉樹
遍歷二叉樹 #include "pch.h" #include <iostream> #include <queue> #include <stdlib.h> #define MAX_TREE_SIZE 100 #define OK 1 #defin
資料結構實驗之二叉樹二:遍歷二叉樹
Problem Description 已知二叉樹的一個按先序遍歷輸入的字元序列,如abc,de,g,f, (其中,表示空結點)。請建立二叉樹並按中序和後序的方式遍歷該二叉樹。 Input 連續輸入多組資料,每組資料輸入一個長度小於50個字元的字串。 Outpu
資料結構(四)之非遞迴遍歷二叉樹
void Inoder(Bitree root)//二叉樹的中序遍歷非遞迴 { IniStack(&S);//初始化一個棧 p=root; while(!isEmpty(S)||p!=NULL) { if(p!=NULL)//如果當前結點不為空進棧 { pu
SDUT3341資料結構實驗之二叉樹二:遍歷二叉樹
cbegdfacgefdba #include <stdio.h> #include <stdlib.h> struct node { char data; struct node *lc,*rc; }; char s[51]; int c; st