實驗七 二叉樹操作(二)

來源:互聯網
上載者:User

實驗七   二叉樹操作(二)

一、   實驗目的

1. 掌握二叉樹的建立

2.     掌握二叉樹的遍曆

3.     掌握二叉樹的應用

二、   實驗內容。

1.前序地建立二叉樹ABC##DE#G##F###,實現複製建構函式、、返回樹的高、返回結點數、層序遍曆二叉樹。

2.設計測試步驟,測試以上每個函數。

3.提高部分:遍曆硬碟中某個檔案夾。

三、   實驗環境

1.pc機,windowsxp作業系統

2.VC++6.0軟體

 

 

#include<stdio.h>

#include<stdlib.h>

#include<iostream>

using namespacestd;

#define SIZE 50

int leafcount=0;

 

typedef structBiTNode{

    char data;

    struct BiTNode *lchild,*rchild;

}BiTNode,*BiTree;

typedef struct{

 BiTNode *base;

 int front;

 int rear;

 int length;

}Queue,*PQueue;

voidinit_Q(Queue &Q);

void En_Q(Queue&Q,BiTree T);

void De_Q(Queue&Q,BiTree &T);

 

voidLevelOrderTraverse(BiTree T){//層序遍曆

 Queue Q;

 init_Q(Q);

 if(T){

  En_Q(Q,T);

 }

 while(Q.front!=Q.rear){

  BiTree temp;

  De_Q(Q,temp);

  putchar(temp->data);

  if(temp->lchild) En_Q(Q,temp->lchild);

  if(temp->rchild) En_Q(Q,temp->rchild);

 }

}

 

voidinit_Q(Queue &Q){

 Q.base=new BiTNode[SIZE];

 Q.front=Q.rear=0;

 Q.length=0;

}

 

void En_Q(Queue&Q,BiTree T){

 if(Q.length==SIZE){

  printf("FULL!\n");

  return;

 }

 Q.base[Q.rear]=*T;

 Q.rear=(Q.rear+1)%SIZE;

 Q.length++;

}

void De_Q(Queue&Q,BiTree &T){

 if(Q.length==0){

  printf("EMPTY!\n");

  return;

 }

 T=&(Q.base[Q.front]);

 Q.front=(Q.front+1)%SIZE;

 Q.length--;

}

 

intCreateBiTree(BiTree *T)/*根據先序序列建立二叉樹的二叉鏈表*/

{ char ch;

    scanf("%c",&ch);

        if(ch=='#')

   {

   *T=NULL;

   }

        else{

           if(!(*T=(BiTree)malloc(sizeof(BiTNode)))) return 0;

            (*T)->data=ch;

            CreateBiTree(&((*T)->lchild));

           CreateBiTree(&((*T)->rchild));

        }

   return 1;

}

 

intpreOrder(BiTree T)/*先序遍曆的遞迴演算法*/

 

{

    if(T){

        printf("%c ",T->data);

   if (!T->lchild&&!T->rchild)leafcount+=1;

        preOrder(T->lchild);

        preOrder(T->rchild);

    }

    return 1;

}

 

intinOrder(BiTree T)/*中序遍曆的遞迴演算法*/

{

    if(T){

        inOrder(T->lchild);

        printf("%c ",T->data);

        inOrder(T->rchild);

    }

    return 1;

}

 

intoldOrder(BiTree T)/*後序遍曆的遞迴演算法*/

{

    if(T){

        oldOrder(T->lchild);

        oldOrder(T->rchild);

        printf("%c ",T->data);

    }

    return 1;

}

int Size(BiTreeT){

//輸出節點數

    if(T==NULL)

       return 0;

    else return1+Size(T->lchild)+Size(T->rchild);

 

}

int Hight(BiTreeT)

{

    if(T==NULL)return 0;

    else{

       int i=Hight(T->lchild);

       int j=Hight(T->rchild);

       return (i>j)?i+1:j+1;

    }

}

 

void main()

 

{   BiTree T;

    leafcount=0;

    int n;

 

    printf("請讀入字元abc--de-g--f---\n");

 

    CreateBiTree(&T);

 

    printf("先序遍曆序列為:");

    preOrder(T);

 

    printf("\n中序遍曆序列為:");

    inOrder(T);

 

    printf("\n後序遍曆序列為:");

    oldOrder(T);

 

    printf("\n     
層序遍曆:");

    LevelOrderTraverse(T);

    printf("\n葉子節點:%d\n",leafcount);

   

    printf("所有結點個數");

    n=Size(T);

    printf("%d",n);

    cout<<"\nhigh="<<Hight(T)<<endl;

 

//system("pause");

 

}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.