【練習】二叉樹的實現
- 定義二叉鏈式結構
#include <stdio.h>
#include <stdlib.h>
#define QUEUE_MAXSIZE 50
typedef char DATA; //定義元素型別
typedef struct ChainTree //定義二叉樹結點型別
{
DATA data; //元素資料
struct ChainTree *left; //左子樹結點指標
struct ChainTree *right; //右子樹結點指標
}ChainBinTree;
- 初始化二叉樹
ChainBinTree *BinTreeInit(ChainBinTree *node) //初始化二叉樹根結點
{
if(node!=NULL) //若二叉樹根結點不為空
return node;
else
return NULL;
}
- 新增結點到二叉樹
int BinTreeAddNode(ChainBinTree *bt,ChainBinTree *node,int n) //新增資料到二叉樹
//bt為父結點,node為子結點,n=1表示新增左子樹,n=2表示新增右子樹
{
if(bt==NULL)
{
printf("父結點不存在,請先設定父結點!\n");
return 0;
}
switch(n)
{
case 1: //新增到左結點
if(bt->left) //左子樹不為空
{
printf("左子樹結點不為空!\n");
return 0;
}else
bt->left=node;
break;
case 2://新增到右結點
if( bt->right) //右子樹不為空
{
printf("右子樹結點不為空!\n");
return 0;
}else
bt->right=node;
break;
default:
printf("引數錯誤!\n");
return 0;
}
return 1;
}
- 獲取二叉樹左右子樹
ChainBinTree *BinTreeLeft(ChainBinTree *bt) //返回左子結點
{
if(bt)
return bt->left;
else
return NULL;
}
ChainBinTree *BinTreeRight(ChainBinTree *bt) //返回右子結點
{
if(bt)
return bt->right;
else
return NULL;
}
- 獲取二叉樹狀態
int BinTreeIsEmpty(ChainBinTree *bt) //檢查二叉樹是否為空,為空則返回1,否則返回0
{
if(bt)
return 0;
else
return 1;
}
int BinTreeDepth(ChainBinTree *bt) //求二叉樹深度
{
int dep1,dep2;
if(bt==NULL)
return 0; //對於空樹,深度為0
else
{
dep1 = BinTreeDepth(bt->left); //左子樹深度 (遞迴呼叫)
dep2 = BinTreeDepth(bt->right); //右子樹深度 (遞迴呼叫)
if(dep1>dep2)
return dep1 + 1;
else
return dep2 + 1;
}
}
- 在二叉樹中查詢
ChainBinTree *BinTreeFind(ChainBinTree *bt,DATA data) //在二叉樹中查詢值為data的結點
{
ChainBinTree *p;
if(bt==NULL)
return NULL;
else
{
if(bt->data==data)
return bt;
else{ // 分別向左右子樹遞迴查詢
if(p=BinTreeFind(bt->left,data))
return p;
else if(p=BinTreeFind(bt->right, data))
return p;
else
return NULL;
}
}
}
- 清空二叉樹
void BinTreeClear(ChainBinTree *bt) // 清空二叉樹,使之變為一棵空樹
{
if(bt)
{
BinTreeClear(bt->left); //清空左子樹
BinTreeClear(bt->right);//清空右子樹
free(bt);//釋放當前結點所佔記憶體
bt=NULL;
}
return;
}
相關文章
- 【練習】樹的實現
- 【練習】二叉樹的遍歷二叉樹
- 二叉樹遞迴練習二叉樹遞迴
- 個人練習之二叉樹的前序遍歷二叉樹
- 二叉樹實現二叉樹
- 二叉排序樹的實現排序
- 霍夫曼樹(最優二叉樹)的實現二叉樹
- 二叉樹java實現二叉樹Java
- 二叉樹的遍歷實現二叉樹
- js實現完全排序二叉樹、二叉搜尋樹JS排序二叉樹
- SDUTOJ 2128 樹結構練習——排序二叉樹的中序遍歷排序二叉樹
- 二叉線索樹實現
- PTA練習7 二叉樹(1)——資料結構二叉樹資料結構
- Java實現紅黑樹(平衡二叉樹)Java二叉樹
- JavaScript 二叉搜尋樹以及實現翻轉二叉樹JavaScript二叉樹
- 每日一練(27):二叉樹的深度二叉樹
- javascript實現二叉搜尋樹JavaScript
- iOS實現反轉二叉樹iOS二叉樹
- java語言實現二叉樹Java二叉樹
- 二叉搜尋樹的python實現Python
- 二叉查詢樹的實現——C++C++
- 平衡二叉樹(AVL樹)和 二叉排序樹轉化為平衡二叉樹 及C語言實現二叉樹排序C語言
- 每日一練(28):平衡二叉樹二叉樹
- 每日一練(16):對稱的二叉樹二叉樹
- 最優二叉樹(哈夫曼樹)Java實現二叉樹Java
- 二叉樹 學習二叉樹
- 小結:二叉樹的幾種實現方式二叉樹
- Python實現二叉樹的增、刪、查Python二叉樹
- 二叉樹的建立及遍歷(JavaScript實現)二叉樹JavaScript
- python實現非平衡二叉樹Python二叉樹
- 使用javascript實現排序二叉樹(2)JavaScript排序二叉樹
- 使用javascript實現排序二叉樹(1)JavaScript排序二叉樹
- 詳細二叉樹實現c++二叉樹C++
- 二叉查詢樹概念及實現
- C#實現二叉查詢樹C#
- 深入學習二叉樹 (一) 二叉樹基礎二叉樹
- java實現-資料結構之二叉樹(三):線索化二叉樹Java資料結構二叉樹
- 二叉樹的建立與遍歷(遞迴實現)二叉樹遞迴