1. 程式人生 > >利用鏈式佇列實現二叉樹的層次遍歷(C語言)

利用鏈式佇列實現二叉樹的層次遍歷(C語言)

規則:

  1. 判斷樹是否為空,為空則返回;
  2. 若不空,從樹的第一層。也就是根節點開始訪問。
  3. 從上而下逐層遍歷, 在同一層中,按從左到右的順序對節點逐個訪問。
#include<stdio.h>
#include<stdlib.h>
typedef struct tree{
    char date;
    struct tree*pLeft,*pRight;
}TREE,*PTREE;
typedef struct List{
    PTREE pBit;
    struct List *pNext;
}NODE,*PNODE;
typedef struct queue
{ PNODE front; PNODE rear; }QUEUE,*PQUEUE; void init_queue(PQUEUE); /*初始化佇列*/ void en_queue(PQUEUE,PTREE); /*入隊操作*/ PTREE out_queue(PQUEUE); /*出隊操作*/ void creat_tree(PTREE*); /*利用先序遍歷的方式建立二叉樹*/ void traverse_tree(PTREE); /*實現樹的層序遍歷*/ int main (void
) { PTREE pT = NULL; creat_tree(&pT); traverse_tree(pT); return 0; } void init_queue(PQUEUE pQ) { pQ->rear = pQ->front = (PNODE)malloc(sizeof(NODE)); if(pQ->front == NULL) exit(0); pQ->front->pNext = NULL; return; } void en_queue(PQUEUE pQ,PTREE pT) { PNODE pNew =
(PNODE)malloc(sizeof(NODE)); if(pNew == NULL) exit(0); else { pNew->pBit = pT; pNew->pNext = NULL; pQ->rear->pNext = pNew; pQ->rear = pNew; return; } } PTREE out_queue(PQUEUE pQ) { PNODE p = pQ->front->pNext; if(pQ->front == pQ->rear) return NULL; pQ->front->pNext = p->pNext; if(pQ->rear == p) pQ->rear = pQ->front; return p->pBit; } void creat_tree(PTREE *pT) { char a; scanf("%c",&a); if(a == '#') *pT = NULL; else { (*pT) = (PTREE)malloc(sizeof(TREE)); if((*pT) == NULL) exit(0); (*pT)->date = a; creat_tree(&(*pT)->pLeft); creat_tree(&(*pT)->pRight); return; } } void traverse_tree(PTREE pT) { PTREE t = NULL; QUEUE pQ; init_queue(&pQ); if(pT != NULL) en_queue(&pQ,pT); /*若樹不空,讓根節點入隊*/ else return; while(pQ.front != pQ.rear) /*佇列不空*/ { t = out_queue(&pQ); /*讓佇列中元素出隊*/ printf("%c\t",t->date); if(t->pLeft != NULL) /*判斷左子樹是否為空*/ en_queue(&pQ,t->pLeft); /*不空則讓它入隊*/ if(t->pRight != NULL) /*判斷右子樹是否為空*/ en_queue(&pQ,t->pRight); /*不空則讓它入隊*/ } printf("\n"); return; }

相關推薦

層次C語言實現

經過兩天長時間的學習, 通過研究佇列以及二叉樹的相關性質,終於寫出了二叉樹的層次遍歷。 該實現的核心就是使用佇列,每次把訪問到的節點的左右子樹放到佇列裡面去,出隊的時候同樣操作! 感謝@原來如此 , @AlexMok ,兩位同學,在小組相互學習的過程中收穫良

C語言資料結構

二叉樹的基本操作  按前輩們的說法,在嵌入式的開發中並不用得到二叉樹。在次就僅僅對二叉樹的基本操作作簡單介紹。 二叉樹性質  (1)第 i 層最多有 2^(i-1) 個節點。 (2)深度為 k 的二叉樹至多有 2^k - 1 個節點。 (3)若一個二叉樹終端節點個數

利用佇列實現層次C語言

規則: 判斷樹是否為空,為空則返回; 若不空,從樹的第一層。也就是根節點開始訪問。 從上而下逐層遍歷, 在同一層中,按從左到右的順序對節點逐個訪問。 #include<stdio.h> #include<stdlib.h> t

python實現層次寬度優先或叫廣度優先

1、何為層次遍歷       說白了,就是一層一層、由上至下、由左至右的搜尋遍歷二叉樹中的元素。                上面這個二叉樹,那麼層次遍歷的輸出應該是:1、2、

層次Java版

/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * T

基於棧和佇列實現

一般我們遍歷二叉樹的時候用的是遞迴,用遞迴實現比較簡單,程式碼如下: C/C++ code ? 1 2 3 4 5 6 7 8 9 10 11 12 13

PTA 6-2 25 分 25分程式碼 陣列實現層次

前三個 中序 先序 後序遍歷直接遞迴就可以了 最後一個層次遍歷 可以把每一層 用陣列存起來,容易實現 (注: 部落格作為交流使用,請勿抄襲應付作業) /* 你的程式碼將被嵌在這裡 */ void

java實現遞迴和非遞迴

現有一顆如下圖所示的二叉樹: 其遍歷的各種方式如下: 構造一顆如下圖所示的二叉樹,用java實現其前序,中序,後序遍歷 注意二叉樹節點的定義如下: public clas

用棧實現非遞迴

先實現棧 #include <stdio.h> #include <stdlib.h> #include <string.h> typedef  char ElemType; #define STACKSIZE 20 typedef st

第六章作業1—--計算機17級 6-2 25 分

6-2 二叉樹的遍歷 (25 分) 本題要求給定二叉樹的4種遍歷。 函式介面定義: void InorderTraversal( BinTree BT ); void PreorderTraversal( BinTree BT ); void PostorderT

的相關操作c語言

二叉樹的相關操作:包括先序序列+中序序列建樹丶後序序列+中序序列建樹丶層次序列+中序序列建樹;先序遍歷丶中序遍歷丶後序遍歷丶層次遍歷;二叉樹的深度及最大寬度;度分別為0,1,2的節點個數以及總結點個數 #include<stdio.h> #include<malloc.h> #i

6-2 25 分

6-2 二叉樹的遍歷 (25 分) 本題要求給定二叉樹的4種遍歷。 函式介面定義: void InorderTraversal( BinTree BT ); void PreorderTraversal( BinTree BT ); void PostorderTraversal

篇2計算節點的個數

樹的大小是樹中存在的元素的數量。下面的樹的大小是5。 使用 Size()函式遞迴計算樹的大小。它的工作原理如下: 樹的大小=左子樹的大小+ 1 +右子樹的大小 演算法: size(樹)

連結串列、棧、佇列C簡要實現

/*單鏈表簡要實現 * * */ #include <stdio.h> #include <stdlib.h> struct Node; typedef struct

Python實現

二叉樹的遍歷 終端 ini right name 一個 pan 樹的遍歷 二叉樹 二叉樹是有限個元素的集合,該集合或者為空、或者有一個稱為根節點(root)的元素及兩個互不相交的、分別被稱為左子樹和右子樹的二叉樹組成。 二叉樹的每個結點至多只有二棵子樹(不存在度大於2的結

C#實現

c# 遍歷 二叉樹 遞歸 循環 C#實現二叉樹的前序、中序、後序遍歷。public class BinaryTreeNode { int value; BinaryTreeNode left; BinaryTreeNode r

碼海拾遺:遞歸實現

code out pos 高度 tor 個數 htc alt include   二叉樹是一種特殊的樹結構:每個節點最多有兩個子節點。   二叉樹的性質:   (1)二叉樹第i層的節點數目最多為 2{i-1} (i≥1)。   (2)深度為k的二叉樹至多有2{k}-1個結點

python3實現與遞歸算法解析

python brush 進行 實現 兩張 二進制 pan ret 如果 1、二叉樹的三種遍歷方式   二叉樹有三種遍歷方式:先序遍歷,中序遍歷,後續遍歷 即:先中後指的是訪問根節點的順序 eg:先序 根左右 中序 左根右 後序 左右根   遍歷總體思路:將樹

python實現深度

1、什麼是深度優先遍歷       其實深度優先遍歷你可以把它看成是前序遍歷,比如對於如下二叉樹:               其深度遍歷的結果是:1,2,4,8,9,5,3,6,7

python實現及其

class Node(): def __init__(self,data=-1): self.data=data self.left=None self.right=None class Tree(): def __init__(