利用鏈式佇列實現二叉樹的層次遍歷(C語言)
規則:
- 判斷樹是否為空,為空則返回;
- 若不空,從樹的第一層。也就是根節點開始訪問。
- 從上而下逐層遍歷, 在同一層中,按從左到右的順序對節點逐個訪問。
#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__(