日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

二叉树-树转二叉树 使用队列,编写transfrom函数,将普通树转换成对应的二叉树。

發布時間:2023/12/4 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 二叉树-树转二叉树 使用队列,编写transfrom函数,将普通树转换成对应的二叉树。 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

樹轉二叉樹
使用隊列,編寫transfrom函數,將普通樹轉換成對應的二叉樹。二叉樹的相關定義如下:

typedef int DataType; typedef struct Node{DataType data;struct Node* left;struct Node* right; }BiTNode, *BiTree;

普通樹節點的定義如下:

#define MAX_CHILDREN_NUM 5 struct _CSNode {DataType data;struct _CSNode *children[MAX_CHILDREN_NUM]; }; typedef struct _CSNode CSNode;

其中,子樹的根節點的指針存放在children數組的前k個元素中,即如果children[i]的值為NULL,
而children[i-1]不為NULL,則表明該結點只有i棵子樹,子樹根結點分別保存在children[0]至children[i-1]中。
隊列相關定義及操作如下:

struct __Queue {int i, j; //指向數組內元素的游標void **array; }; typedef struct __Queue Queue;Queue* create_queue(); //創建隊列 bool is_empty_queue(Queue *tree); //隊為空返回true,不為空時返回false void* del_queue(Queue *tree); //結點指針出隊 void add_queue(Queue *tree, void *node); //結點指針入隊 void free_queue(Queue *tree); //釋放隊列

transform函數定義如下:

BiTNode* transform(CSNode *root);


其中 root 為普通樹的根結點,函數返回該樹對應二叉樹的根結點。

#include <stdlib.h> #include <stdio.h> BiTNode* transform(CSNode *root){if(!root) return NULL;Queue *que, *bque;BiTNode *p;//二叉樹根結點創立 //小心點, 記得分配空間 p = (BiTNode *)malloc(sizeof(struct Node));p->data = root->data;p->left = p->right = NULL;que = create_queue();bque = create_queue();//注意add_queue函數的返回值, 所以不用 xx = add_queue(xx)的形式add_queue(que, root);add_queue(bque, p);while(!is_empty_queue(que)){BiTree bq;//創建二叉樹隊列頭結點(根結點) bq = del_queue(bque);CSNode *q;q = del_queue(que);//第一次執行該操作就相當于建立了二叉樹的根int i = 0; BiTNode *former = NULL;for(i = 0; i < MAX_CHILDREN_NUM; i++){//遞歸形式if(q->children[i]){//判存在 BiTNode *bnode = (BiTNode *)malloc(sizeof(struct Node));bnode->data = q->children[i]->data;bnode->left = bnode->right = NULL; //放置結點位置if(i == 0){bq->left = bnode;}else{//兄弟結點變成父子結點former->right = bnode;}former= bnode;add_queue(bque, bnode);add_queue(que, q->children[i]);}} }free(que->array); //釋放順序不能錯free(que);free(bque->array);free(bque);return p; }

?

總結

以上是生活随笔為你收集整理的二叉树-树转二叉树 使用队列,编写transfrom函数,将普通树转换成对应的二叉树。的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。