二叉樹演算法驗證(2)
阿新 • • 發佈:2019-02-17
/*
*Copyright (c)2017,煙臺大學計算機與控制工程學院
*All rights reservrd.
*檔名稱 :test.cpp
*作者:杜昕曄
*完成時間:2017年12月08日
*版本號:v1.0
*問題描述:二叉樹構造演算法的驗證
問題及程式碼:
利用btreee.h見演算法庫
1.由先序序列和中序序列構造二叉樹
執行結果:#include <stdio.h> #include <malloc.h> #include "btree.h" BTNode *CreateBT1(char *pre,char *in,int n) /*pre存放先序序列,in存放中序序列,n為二叉樹結點個數, 本演算法執行後返回構造的二叉鏈的根結點指標*/ { BTNode *s; char *p; int k; if (n<=0) return NULL; s=(BTNode *)malloc(sizeof(BTNode)); //建立二叉樹結點*s s->data=*pre; for (p=in; p<in+n; p++) //在中序序列中找等於*ppos的位置k if (*p==*pre) //pre指向根結點 break; //在in中找到後退出迴圈 k=p-in; //確定根結點在in中的位置 s->lchild=CreateBT1(pre+1,in,k); //遞迴構造左子樹 s->rchild=CreateBT1(pre+k+1,p+1,n-k-1); //遞迴構造右子樹 return s; } int main() { ElemType pre[]="ABDGCEF",in[]="DGBAECF"; BTNode *b1; b1=CreateBT1(pre,in,7); printf("b1:"); DispBTNode(b1); printf("\n"); return 0; }
2.由中序序列和後序序列構造二叉樹:
執行結果:#include <stdio.h> #include <malloc.h> #include "btree.h" #define N 30 typedef ElemType SqBTree[N]; BTNode *trans(SqBTree a,int i) { BTNode *b; if (i>N) return(NULL); if (a[i]=='#') return(NULL); //當節點不存在時返回NULL b=(BTNode *)malloc(sizeof(BTNode)); //建立根節點 b->data=a[i]; b->lchild=trans(a,2*i); //遞迴建立左子樹 b->rchild=trans(a,2*i+1); //遞迴建立右子樹 return(b); //返回根節點 } int main() { BTNode *b; ElemType s[]="0ABCD#EF#G####################"; b=trans(s,1); printf("b:"); DispBTNode(b); printf("\n"); return 0; }