二叉樹的程式設計與實現

2021-07-23 22:52:55 字數 3041 閱讀 6964

實驗目的:掌握指標變數、動態變數的含義,掌握二叉樹的結構特徵,以及各種儲存結構的特點及適用範圍,掌握指標型別描述、訪問和處理二叉樹的運算;

實驗原理:參照課本 p.95-107, figure4.13-4.25;

實驗內容:已知以二叉樹表作為儲存結構,寫出按層次順序遍歷二叉樹的演算法

演算法思想:本演算法採用乙個佇列 q,先將二叉樹根節點入佇列,然後退佇列,輸出該節點,若它有左子樹,便將左子樹根節點入佇列;若有右子樹,便將右子樹根節點入佇列,直到佇列空為止。因為佇列的特點是先進先出,從而達到按層次順序遍歷二叉樹的目的。

實驗要求

1) 實現二叉樹表的層次遍歷演算法,並給出應用。

相關**

fatal.h

/*

* 預定義錯誤幫助函式

*/#include

#include

#define error( str ) fatalerror( str )

#define fatalerror( str ) fprintf( stderr, "%s\n", str ), exit( 1 )

tree.h

/*

*樹相關函式及結構宣告

*/#ifndef _tree_h

typedef

char elementtype;

struct treenode;

typedef

struct treenode *position;

typedef

struct treenode *searchtree;

searchtree makeempty(searchtree t);

position find(elementtype x, searchtree t);

position findmin(searchtree t);

position findmax(searchtree t);

searchtree insert(elementtype x, searchtree t);

searchtree delete(elementtype x, searchtree t);

elementtype retrieve(position p);

void printelement(searchtree t);

void preorder(searchtree t);

void inorder(searchtree t);

void postorder(searchtree t);

#endif /* tree_h */

tree.c

/*

*相關函式的實現

*/#include "fatal.h"

#include "tree.h"

struct treenode

;searchtree

makeempty(searchtree t)

return null;

}position

find(elementtype x, searchtree t)

/* 對二叉查詢樹的findmin的遞迴實現 */

position

findmin(searchtree t)

/* 對二叉查詢樹的findmax的非遞迴實現 */

position

findmax(searchtree t)

searchtree

insert(elementtype x, searchtree t)

}else

if (x < t->element)

t->left = insert(x, t->left);

else

if (x > t->element)

t->right = insert(x, t->right);

/* else x is in the tree already;we'll do nothing */

return t; /* do not forget this line!!! */

}searchtree

delete(elementtype x, searchtree t)

else

/* one or zero children */

return t;

}elementtype

retrieve(position p)

void

printelement(searchtree t)

void

preorder(searchtree t)

}void

inorder(searchtree t)

}void

postorder(searchtree t)

}

main.c

/*

*程式主函式

*/#include "tree.h"

#include

int main()

printf("\n前序遍歷 :");

preorder(t);

printf("\n中序遍歷 :");

inorder(t);

printf("\n後序遍歷 :");

postorder(t);

printf("\n");

while (1);

return

0;}

結果

實驗環境 vs2015

二叉樹 滿二叉樹與完全二叉樹

二叉樹 binary tree 是n n 0 個元素的有限集合,該集合為空或者為由乙個稱為 根 的元素及兩個不相交的 被分別稱為左子樹和右子樹的二叉樹組成 二叉樹的基本特點 每個結點最多有兩棵子樹 左子樹和右子樹是有順序的,且不可顛倒 圖一1 結點 二叉樹中的每乙個元素都稱為結點。通常二叉樹的許多名...

二叉樹的程式設計

define crt secure no warnings include include includestruct binarynode 統計葉子的數量 void calculateleafnum struct binarynode root,int num if root lchild nul...

二叉樹 排序二叉樹的簡單實現

二叉樹 排序二叉樹 include using namespace std 二叉樹的節點 date 資料 left 指向二叉樹的左子樹 right 指向二叉樹的右子樹 template struct node template class btree public btree root null c...