二叉樹的基本操作

2021-08-14 14:05:39 字數 2782 閱讀 1984

實驗名稱:二叉樹的基本操作

實驗室名稱:丹青909

實驗台號:14

學生姓名: 陳佳龍

專業班級: 2015級1班

指導教師:於慧伶

實驗日期:2017-6-9

一、實驗目的1、

掌握二叉樹的儲存實現。 2、

掌握二叉樹的遍歷思想。 3、

掌握二叉樹的常見演算法的程式實現。

二、實驗儀器及環境:

pc計算機;windows xp作業系統、visual c++6.0、codeblocks 1、

#include

#include

#include

#include

#include

#include

using namespace std;

int leafcount=0;

typedef struct nodebitnode,*bitree;

void createbitree(bitree *bt){

char ch;

ch=getchar();

// cin>>ch;

if(ch!='@'){

*bt=(bitree)malloc(sizeof(bitnode));

(*bt)->data=ch;

createbitree(&((*bt)->lchild));

createbitree(&((*bt)->rchild));

else *bt=null;

void preorder(bitree bt){//先序

if(bt==null) return;

coutpreorder(bt->lchild);

preorder(bt->rchild);

void inorder(bitree bt){//中序

if(bt==null) return;

inorder(bt->lchild);

coutinorder(bt->rchild);

void postorder(bitree bt){//後序

if(bt==null) return;

postorder(bt->lchild);

postorder(bt->rchild);

coutvoid inorder2(bitree root){//非遞迴中序遍歷

stacks;

bitree p=root;

while(p!=null||!s.empty())

while(p!=null)

s.push(p);

p=p->lchild;

if(!s.empty())

p=s.top();

couts.pop();

p=p->rchild;

int depth(bitree root){

int ldepth,rdepth;

if(!root)

return 0;

else{

ldepth =depth(root->lchild)+1;

rdepth =depth(root->rchild)+1;

return max(ldepth,rdepth);

coutif(root!=null){

countleaf(root->lchild);

countleaf(root->rchild);

if(root->lchild==null&&root->rchild==null)

leafcount++;

void printfromtoptobottom(bitree t)

if(t == null)

return;

queuequeuetreenode;

queuetreenode.push(t);

while(!queuetreenode.empty())

bitree pnode = queuetreenode.front();

cout << pnode->data << " ";

queuetreenode.pop();

if(pnode->lchild != null)

queuetreenode.push(pnode->lchild);

if(pnode->rchild != null)

queuetreenode.push(pnode->rchild);

void display(bitree root)        //顯示樹形結構

if(root!=null)

coutif(root->lchild!=null)

cout<<'(';

display(root->lchild);

if(root->rchild!=null)

cout<<',';

display(root->rchild);

cout<<')';

int main()

bitree bt;

int n;

cout<<"請按先序次序輸入二叉樹中結點的值,@表示空樹:"// cout<<"二叉樹的樹形顯示:"cout<<"先序遞迴遍歷二叉樹:"n=depth(bt);

coutleafcount=0;

countleaf(bt);

coutreturn 0;7、

建立二叉樹時注意空節點,注意先序,中序和後序的遞迴遍歷次序,非遞迴遍歷和層次遍歷時應用到之前學習的棧和佇列知識。

簽名: 年月日

二叉樹基本操作

tree.h ifndef tree h define tree h include typedef int element 定義二叉樹 typedef struct nodetreenode void preorder treenode root 遞迴前序遍歷 void inorder treen...

二叉樹基本操作

一.二叉樹的定義 二.二叉樹的建立 定義一棵無資料的二叉樹 6 int left size 7 int right size 為了操作簡便,我們定義一棵不需要儲存資料的二叉樹,只要能儲存節點之間的邏輯關係就行,所以用兩個陣列來表示。left i 第i個節點的左子節點的序號 right i 第i個節點...

二叉樹基本操作

include include define maxsize 100 typedef char elemtype typedef struct node btnode void createbtnode btnode b,char str 由str串建立二叉鏈 j ch str j btnode f...