資料結構實驗:二叉樹的遍歷(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);
}
}
相關文章
- 資料結構-二叉樹的遍歷(類C語言描寫敘述)資料結構二叉樹C語言
- 資料結構 二叉樹遍歷資料結構二叉樹
- 資料結構——樹與二叉樹的遍歷資料結構二叉樹
- 實戰資料結構(11)_二叉樹的遍歷資料結構二叉樹
- 資料結構之遍歷二叉樹資料結構二叉樹
- 【資料結構】二叉樹的建立與遍歷資料結構二叉樹
- 資料結構-二叉樹的儲存結構與遍歷資料結構二叉樹
- python資料結構之二叉樹遍歷的實現Python資料結構二叉樹
- 二叉樹的構建以及遍歷(Java語言描述)二叉樹Java
- 資料結構(C語言版)第2版------第五章 樹與二叉樹資料結構C語言二叉樹
- 資料結構與演算法-二叉樹遍歷資料結構演算法二叉樹
- 資料結構與演算法——二叉樹的前序遍歷,中序遍歷,後序遍歷資料結構演算法二叉樹
- 【資料結構】二叉樹遍歷(遞迴+非遞迴)資料結構二叉樹遞迴
- C++樹——遍歷二叉樹C++二叉樹
- 【資料結構&演算法】11-樹基礎&二叉樹遍歷資料結構演算法二叉樹
- [資料結構]二叉樹的前中後序遍歷(遞迴+迭代實現)資料結構二叉樹遞迴
- Python資料結構——解析樹及樹的遍歷Python資料結構
- 二叉樹的遍歷實現二叉樹
- 二叉樹的構造與遍歷二叉樹
- 二叉樹遍歷方法總結二叉樹
- 資料結構實驗——二叉樹的常見操作資料結構二叉樹
- 二叉樹的遍歷二叉樹
- 一本正經的聊資料結構(5):二叉樹的儲存結構與遍歷資料結構二叉樹
- 二叉樹 & 二叉查詢樹 ADT【資料結構與演算法分析 c 語言描述】二叉樹資料結構演算法
- 二叉樹 & 二叉查詢樹 ADT [資料結構與演算法分析 c 語言描述]二叉樹資料結構演算法
- 【資料結構】二叉樹(c++)資料結構二叉樹C++
- 資料結構 排序二叉樹(BST) 插入刪除查詢 中序遍歷 銷燬(後序遍歷)資料結構排序二叉樹
- 二叉樹---遍歷二叉樹
- 二叉樹遍歷二叉樹
- [資料結構] 根據前中後序遍歷中的兩種構造二叉樹資料結構二叉樹
- LintCode 前序遍歷和中序遍歷樹構造二叉樹二叉樹
- 資料結構實驗之圖論二:圖的深度遍歷資料結構圖論
- [資料結構] BFS演算法實現層序遍歷輸出一顆二叉樹資料結構演算法二叉樹
- 遍歷結果推導二叉樹二叉樹
- SDUTOJ 2128 樹結構練習——排序二叉樹的中序遍歷排序二叉樹
- 【資料結構與演算法】二叉樹的 Morris 遍歷(前序、中序、後序)資料結構演算法二叉樹
- 完全二叉樹的遍歷二叉樹
- 線索二叉樹的構造和遍歷二叉樹