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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

二叉树:二叉搜索树的编码和解码

發布時間:2023/11/27 生活经验 45 豆豆
生活随笔 收集整理的這篇文章主要介紹了 二叉树:二叉搜索树的编码和解码 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

二叉搜索樹的編碼和解碼描述:
編碼:即將一個二叉搜索樹編碼,節點數值轉換為字符串
解碼:即將一個字符串解碼,數值轉換為對應的二叉搜索樹的節點

過程導圖如下:

針對性編碼實現如下:

/*數字轉字符串*/
void change_num_to_string(int val, string &tmp) {string buf;while(val) {buf += val % 10 + '0';val /= 10; }for (int i = buf.length() - 1;i >= 0; i--) {tmp += buf[i];}tmp += '#';
}
/*先序遍歷,進行編碼,最終結果放入buf中*/
void code_tree(Tree *node, string &buf) {if (node == NULL) {return;}string s;change_num_to_string(node -> data, s);buf.append(s);code_tree(node -> left, buf);code_tree(node -> right, buf);
}

編碼之后的string buf內容類似8#3#2#1#9#20#

針對編碼的string buf進行解碼實現如下:

/*創建二叉搜索樹*/
void create_tree(TreeNode *node, Tree *insert) {if ((*node) -> data > insert -> data) {if ((*node) -> left) {create_tree(&(*node) ->left,insert);} else {(*node) -> left = insert;}} else {if ((*node)  -> right) {create_tree(&(*node) ->right, insert);} else {(*node)  -> right = insert;}}
}
/*解碼*/
TreeNode *decode_tree(string s) {int result = 0;std::vector<Tree *> node_arr;/*字符串轉數字*/for (int i = 0;i < s.size(); ++i) {if (s[i] != '#') {result = 10 * result + (s[i] - '0');} else {Tree *node = (Tree *)malloc(sizeof(tree));node -> data = result;node_arr.push_back(node);result = 0;}}/*創建二叉樹*/for (int i = 1;i < node_arr.size(); ++i) {create_tree(&node_arr[0], node_arr[i]);}return &node_arr[0];
}

最終解碼輸出為一個完整的二叉樹

8
----3
--------2
------------1
----9
--------20

總結

以上是生活随笔為你收集整理的二叉树:二叉搜索树的编码和解码的全部內容,希望文章能夠幫你解決所遇到的問題。

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