資料結構實驗:二叉樹的遍歷(C語言版)
#include<stdio.h>
#include<stdlib.h>
//二叉樹結點定義
typedef struct BITNode
{
char data;
struct BITNode *lchild,*rchild;
} BITNode,*BITree;
static int length=0;//二叉樹結點個數
//靜態二叉連結串列
typedef struct ATNode
{
char data;
int lchild;
int rchild;
} ATNode;
ATNode Array[100];//儲存二叉連結串列結點
//先序建立二叉樹
void CreateBITree(BITree *T)
{
char ch;
scanf("%c",&ch);
if(ch==' ')
*T=NULL;
else
{
*T=(BITree )malloc(sizeof(BITNode));
(*T)->data=ch;
CreateBITree(&((*T)->lchild));
CreateBITree(&((*T)->rchild));
}
}
//先序遍歷二叉樹
void VisitBitree(BITree T)
{
if(T)
{
length++;
Array[length].data=T->data;
VisitBitree(T->lchild);//訪問左孩子
VisitBitree(T->rchild);//訪問右孩子
}
}
void Visit(BITree T)
{
if(T){
Visit(T->lchild);
printf("%c->",T->data);
Visit(T->rchild);
}
}
//二叉樹轉化為靜態二叉連結串列
void BitreeTransform(BITree T)
{
int i,j;
if(T)
{
j=1;
while(T->data!=Array[j].data)
j++;//確定T結點的陣列下標
if(T->lchild!=NULL)
{
i=j;
while(T->lchild->data!=Array[i].data)
i++;//確定T->lchild結點的陣列下標
Array[j].lchild=i;
}
else
Array[j].lchild=0;
if(T->rchild!=NULL)
{
i=j;
while(T->rchild->data!=Array[i].data)
i++;//確定T->rchild結點的陣列下標
Array[j].rchild=i;
}
else{
Array[j].rchild=0;
BitreeTransform(T->lchild);
BitreeTransform(T->rchild);
}
}
}
void main()
{
int j;
printf("建立一個帶節點的二叉連結串列:\n");
BITree T=NULL;//T為空二叉樹
CreateBITree(&T);//建立一棵二叉樹
printf("中序遍歷結果為:\n");
VisitBitree(T);
Visit(T);
printf("\n");
BitreeTransform(T);
printf("轉化為靜態二叉連結串列:\n");
printf("位置\tlchild\tdata\trchild\n");
for(j=1; j<=length; j++)
{
printf("%d\t%d\t%c\t%d\n", j,Array[j].lchild, Array[j].data, Array[j].rchild);
}
}
#include<stdlib.h>
//二叉樹結點定義
typedef struct BITNode
{
char data;
struct BITNode *lchild,*rchild;
} BITNode,*BITree;
static int length=0;//二叉樹結點個數
//靜態二叉連結串列
typedef struct ATNode
{
char data;
int lchild;
int rchild;
} ATNode;
ATNode Array[100];//儲存二叉連結串列結點
//先序建立二叉樹
void CreateBITree(BITree *T)
{
char ch;
scanf("%c",&ch);
if(ch==' ')
*T=NULL;
else
{
*T=(BITree )malloc(sizeof(BITNode));
(*T)->data=ch;
CreateBITree(&((*T)->lchild));
CreateBITree(&((*T)->rchild));
}
}
//先序遍歷二叉樹
void VisitBitree(BITree T)
{
if(T)
{
length++;
Array[length].data=T->data;
VisitBitree(T->lchild);//訪問左孩子
VisitBitree(T->rchild);//訪問右孩子
}
}
void Visit(BITree T)
{
if(T){
Visit(T->lchild);
printf("%c->",T->data);
Visit(T->rchild);
}
}
//二叉樹轉化為靜態二叉連結串列
void BitreeTransform(BITree T)
{
int i,j;
if(T)
{
j=1;
while(T->data!=Array[j].data)
j++;//確定T結點的陣列下標
if(T->lchild!=NULL)
{
i=j;
while(T->lchild->data!=Array[i].data)
i++;//確定T->lchild結點的陣列下標
Array[j].lchild=i;
}
else
Array[j].lchild=0;
if(T->rchild!=NULL)
{
i=j;
while(T->rchild->data!=Array[i].data)
i++;//確定T->rchild結點的陣列下標
Array[j].rchild=i;
}
else{
Array[j].rchild=0;
BitreeTransform(T->lchild);
BitreeTransform(T->rchild);
}
}
}
void main()
{
int j;
printf("建立一個帶節點的二叉連結串列:\n");
BITree T=NULL;//T為空二叉樹
CreateBITree(&T);//建立一棵二叉樹
printf("中序遍歷結果為:\n");
VisitBitree(T);
Visit(T);
printf("\n");
BitreeTransform(T);
printf("轉化為靜態二叉連結串列:\n");
printf("位置\tlchild\tdata\trchild\n");
for(j=1; j<=length; j++)
{
printf("%d\t%d\t%c\t%d\n", j,Array[j].lchild, Array[j].data, Array[j].rchild);
}
}
相關文章
- 資料結構 二叉樹遍歷資料結構二叉樹
- 資料結構——樹與二叉樹的遍歷資料結構二叉樹
- 【資料結構】二叉樹的建立與遍歷資料結構二叉樹
- 二叉樹的構建以及遍歷(Java語言描述)二叉樹Java
- 資料結構(C語言版)第2版------第五章 樹與二叉樹資料結構C語言二叉樹
- 資料結構與演算法-二叉樹遍歷資料結構演算法二叉樹
- C++樹——遍歷二叉樹C++二叉樹
- 【資料結構&演算法】11-樹基礎&二叉樹遍歷資料結構演算法二叉樹
- [資料結構]二叉樹的前中後序遍歷(遞迴+迭代實現)資料結構二叉樹遞迴
- 二叉樹 & 二叉查詢樹 ADT [資料結構與演算法分析 c 語言描述]二叉樹資料結構演算法
- 二叉樹 & 二叉查詢樹 ADT【資料結構與演算法分析 c 語言描述】二叉樹資料結構演算法
- 二叉樹的遍歷實現二叉樹
- 二叉樹遍歷方法總結二叉樹
- 一本正經的聊資料結構(5):二叉樹的儲存結構與遍歷資料結構二叉樹
- 用python講解資料結構之樹的遍歷Python資料結構
- 資料結構實驗之圖論二:圖的深度遍歷資料結構圖論
- [資料結構] 根據前中後序遍歷中的兩種構造二叉樹資料結構二叉樹
- 二叉樹的遍歷二叉樹
- [資料結構] BFS演算法實現層序遍歷輸出一顆二叉樹資料結構演算法二叉樹
- Codeup《演算法筆記》9.2小節——資料結構專題(2)->二叉樹的遍歷->二叉樹演算法筆記資料結構二叉樹
- 二叉樹遍歷二叉樹
- 二叉樹---遍歷二叉樹
- 【資料結構與演算法】二叉樹的 Morris 遍歷(前序、中序、後序)資料結構演算法二叉樹
- 資料結構系列:Objective-C實現二叉樹資料結構Object二叉樹
- 144.二叉樹的前序遍歷145.二叉樹的後序遍歷 94.二叉樹的中序遍歷二叉樹
- 線索二叉樹的構造和遍歷二叉樹
- 完全二叉樹的遍歷二叉樹
- 樹 【資料結構與演算法分析 c 語言描述】資料結構演算法
- 玩轉二叉樹(樹的遍歷)二叉樹
- 什麼是遍歷二叉樹,JavaScript實現二叉樹的遍歷(遞迴,非遞迴)二叉樹JavaScript遞迴
- 資料結構(樹):二叉樹資料結構二叉樹
- 資料結構實驗六是否同一顆二叉樹資料結構二叉樹
- 資料結構 實驗六(二叉排序樹字元統計)資料結構排序字元
- 388,先序遍歷構造二叉樹二叉樹
- 資料結構實驗之二叉樹八:(中序後序)求二叉樹的深度資料結構二叉樹
- 二叉樹遍歷方法二叉樹
- 二叉樹遍歷 -- JAVA二叉樹Java
- 【圖解資料結構】 一組動畫徹底理解二叉樹三種遍歷圖解資料結構動畫二叉樹
- 樹的遍歷c/c++C++