亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C > 正文

使用C語言構建基本的二叉樹數據結構

2020-01-26 14:58:14
字體:
來源:轉載
供稿:網友

二叉樹結構常用的一些初始化代碼

#include#includetypedef struct Node{ int data; Node *leftchild; Node *rightchild;}Node;/* 初始化一棵二叉樹排序樹。*/void InitBinaryTree(Node**root,int elem){ *root=(Node*)malloc(sizeof(Node)); if(!(*root)) { printf("Memory allocation for root failed./n"); return; } (*root)->data=elem; (*root)->leftchild=NULL; (*root)->rightchild=NULL;}/* 向二叉樹排序樹中插入節點。*/void InsertNode(Node *root,int elem){ Node *newnode=NULL; Node *p=root,*last_p=NULL; newnode=(Node*)malloc(sizeof(Node)); if(!newnode) { printf("Memory allocation for newnode failed./n"); return; } newnode->data=elem; newnode->leftchild=NULL; newnode->rightchild=NULL; while(NULL!=p) { last_p=p; if(newnode->datadata) { p=p->leftchild; } else if(newnode->data>p->data) { p=p->rightchild; } else { printf("Node to be inserted has existed./n"); free(newnode); return; } } p=last_p; if(newnode->datadata) { p->leftchild=newnode; } else { p->rightchild=newnode; }}/* 創建一棵二叉樹排序樹。*/void CreatBinarySearchTree(Node **root,int data[],int num){ int i; for(i=0;i { if(NULL==*root) { InitBinaryTree(root,data[i]); } else { InsertNode(*root,data[i]); } }}

根據前序序列、中序序列構建二叉樹
函數定義

 bt rebuildTree(char *pre, char *in, int len); 


參數:
* pre:前序遍歷結果的字符串數組
* in:中序遍歷結果的字符串數組
len : 樹的長度
例如:
前序遍歷結果: a b c d e f g h
中序遍歷結果: c b e d f a g h

算法思想

  •     遞歸思想,遞歸的終止條件是樹的長度len == 0
  •     在中序遍歷的數組中找到前序數組的第一個字符,記錄在中序數組中的位置index.如果找不到,說明前序遍歷數組和中序遍歷數組有問題,提示錯誤信息,退出程序即可;找到index后,新建一個二叉樹節點t,t->item = *pre,然后遞歸的求t的左孩子和有孩子
  •     遞歸的左孩子:void rebuildTree(pre + 1, in, index)
  •     遞歸的右孩子:void rebuildTree(pre + (index + 1), in + (index + 1), len - (index + 1))

實現代碼(c語言版)

  

 /**   * Description:根據前序和中序構建二叉樹   */  bt rebuildTree(char *pre, char *in, int len)  {   bt t;   if(len <= 0)   {    //遞歸終止    t = NULL;   }else   {    //遞歸主體    int index = 0;        while(index < len && *(pre) != *(in + index))    {     index ++;    }        if(index >= len)    {     printf("前序遍歷或者中序遍歷數組有問題!/n");     exit(-1);    }        t = (struct bintree *)malloc(sizeof(struct bintree));    t->item = *pre;    t->lchild = rebuildTree(pre + 1, in, index);    t->rchild = rebuildTree(pre + (index + 1), in + (index + 1), len - (index + 1));   }   return t;  } 


根據中序序列、后序序列構建二叉樹
函數定義

 /**   * 中序、后序序列構建二叉樹   */  btree* rebuildTree(char *order, char *post, int len); 


算法思想
中序序列:C、B、E、D、F、A、H、G、J、I

后序序列:C、E、F、D、B、H、J、I、G、A

遞歸思路:

  •     根據后序遍歷的特點,知道后序遍歷最后一個節點為根節點,即為A
  •     觀察中序遍歷,A左側CBEDF為A左子樹節點,A后側HGJI為A右子樹節點
  •     然后遞歸的構建A的左子樹和后子樹


實現代碼(c代碼)

 /**   * 根據中序和后序序列構建二叉樹   * (ps:昨晚參加阿里筆試,等到最后說可以免筆試直接面試,今天估計還是要根據學校篩選,哈哈,為了這點   * 也得參加阿里筆試,不能讓自己的學校受到鄙視)   */    #include <stdio.h>  #include <stdlib.h>  #include <string.h>    int n;    typedef struct btree {   struct btree *lchild;   struct btree *rchild;   char data;  } btree;    /**   * 中序、后序序列構建二叉樹   */  btree* rebuildTree(char *order, char *post, int len)  {   btree *t;     if (len <= 0) {    return NULL;   } else {    int index = 0;      while (index < len && *(post + len - 1) != *(order + index)) {     index ++;    }       t = (btree *)malloc(sizeof(btree));    t->data = *(order + index);    t->lchild = rebuildTree(order, post, index);    t->rchild = rebuildTree(order + index + 1, post + index, len - (index + 1));   }     return t;  }    /**   * 前序遍歷二叉樹   */  void preTraverse(btree *t)  {   if (t) {    printf("%c ", t->data);    preTraverse(t->lchild);    preTraverse(t->rchild);   }  }    int main(void)  {   int i;   char *post, *order;   btree *t;     while (scanf("%d", &n) != EOF) {    post = (char *)malloc(n);    order = (char *)malloc(n);        getchar();    for (i = 0; i < n; i ++)     scanf("%c", order + i);      getchar();    for (i = 0; i < n; i ++)     scanf("%c", post + i);      t = rebuildTree(order, post, n);      preTraverse(t);    printf("/n");      free(post);    free(order);     }     return 0;  } 

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美激情啊啊啊| 黑人巨大精品欧美一区免费视频| 国产综合香蕉五月婷在线| 久久影视电视剧免费网站| 久久99热精品这里久久精品| 亚洲精品第一页| 韩国19禁主播vip福利视频| 亚洲新中文字幕| 中国china体内裑精亚洲片| 亚洲在线www| 成人免费淫片aa视频免费| 国产第一区电影| 欧美日韩国产精品一区二区不卡中文| 国产三级精品网站| 在线观看国产成人av片| 国产精品视频永久免费播放| 成人性教育视频在线观看| 亚洲一区二区久久久| 久久久久久国产精品| 国产亚洲一级高清| 最近2019免费中文字幕视频三| 久久亚洲精品中文字幕冲田杏梨| 91免费人成网站在线观看18| 欧洲美女7788成人免费视频| 亚洲精品白浆高清久久久久久| 97国产suv精品一区二区62| 欧美老少配视频| 国产精品久久久久久搜索| 欧美精品在线免费观看| 欧美日韩成人在线播放| 亚洲电影免费观看| 中文欧美在线视频| 亚洲欧洲第一视频| 久久久亚洲网站| 久久精品国产v日韩v亚洲| 国产人妖伪娘一区91| 97**国产露脸精品国产| 在线视频日本亚洲性| 国产日韩在线播放| 91欧美精品成人综合在线观看| 欧美在线精品免播放器视频| 91香蕉嫩草影院入口| 亚洲欧洲黄色网| 91精品视频在线看| 91亚洲国产成人久久精品网站| 亚洲视频自拍偷拍| 国产精品爱啪在线线免费观看| 成人高清视频观看www| 国产精品视频在线观看| 亚洲人成啪啪网站| 亚洲第一av网站| 91精品久久久久久久| 亚洲图片在线综合| 国产在线观看不卡| 亚洲欧美国产制服动漫| 国精产品一区一区三区有限在线| 欧美与欧洲交xxxx免费观看| 久久精品国产综合| 国产精品一区久久| 日韩精品在线视频观看| 中文字幕欧美日韩精品| 久久综合免费视频影院| 亚洲国产另类久久精品| 欧美怡红院视频一区二区三区| 久久久www成人免费精品张筱雨| 国产欧美中文字幕| 亚洲美女福利视频网站| 久久久精品亚洲| 国产精品露脸自拍| 91久久精品国产91久久性色| 麻豆一区二区在线观看| 日韩中文字幕视频| 欧美亚洲一区在线| 国产美女主播一区| 亚洲日本中文字幕免费在线不卡| 欧美第一页在线| 亚洲美女黄色片| 亚洲va电影大全| 欧美中文字幕第一页| 久久伊人色综合| 欧美久久精品午夜青青大伊人| 国产午夜精品一区理论片飘花| 国产精品永久免费视频| 日本高清视频一区| 日韩av第一页| 国产一区二区三区高清在线观看| 91成人在线播放| 91亚洲国产成人久久精品网站| 日韩有码在线播放| 国产成人av在线播放| 国产精品1区2区在线观看| 中文字幕亚洲综合久久| 欧美日韩成人网| 日韩一区av在线| 亚洲已满18点击进入在线看片| 国产精品久久久久久久午夜| 国产精品jvid在线观看蜜臀| 国产精品亚洲第一区| 日韩成人xxxx| 一区二区欧美久久| 啊v视频在线一区二区三区| 久久影院资源网| 中文字幕亚洲无线码在线一区| 欧美性猛交xxxx乱大交极品| 最近2019年好看中文字幕视频| 97香蕉久久超级碰碰高清版| 成人亲热视频网站| 亚洲成人av在线播放| 亚洲成人动漫在线播放| 久久久这里只有精品视频| 久久久亚洲成人| 久久国产精品影视| 日日骚av一区| 国产精品久久久久久久久久久久| 日韩视频中文字幕| 精品亚洲一区二区| 一区二区欧美久久| 日韩欧美亚洲综合| 夜夜嗨av色一区二区不卡| 一区二区三欧美| 超碰精品一区二区三区乱码| 久久精品国产亚洲7777| 亚洲欧洲日本专区| 久久成人免费视频| 91色中文字幕| 91久久在线播放| 中文字幕日韩免费视频| 欧美大片免费观看| 日本精品免费一区二区三区| 亚洲最大的网站| 欧美日本在线视频中文字字幕| 欧美在线播放视频| 久久国产精品亚洲| 成人在线免费观看视视频| 亚洲最大的网站| 97在线观看免费| 国产精品福利在线观看| 亚洲国产成人精品久久久国产成人一区| 国产成人精彩在线视频九色| 国产精品成人品| 国产综合久久久久久| 日韩欧美a级成人黄色| 亚洲成色999久久网站| 久久亚洲影音av资源网| 国产成人亚洲综合91精品| 欧美色另类天堂2015| 欧美有码在线观看| 日本a级片电影一区二区| 国产精品一区久久| 中文字幕精品网| 日韩欧美精品中文字幕| 91精品国产高清久久久久久| 国产精品视频自在线| 欧美日韩在线影院| 亚洲成色www8888| 欧美一级电影在线| 国产精品久久久久久久久久| 国产91精品视频在线观看| 亚洲xxx视频| 尤物yw午夜国产精品视频明星| 欧美精品亚州精品| 亚洲人成网7777777国产| 在线观看视频亚洲| 欧美午夜视频在线观看|