二叉树:二叉搜索树的编码和解码
生活随笔
收集整理的這篇文章主要介紹了
二叉树:二叉搜索树的编码和解码
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
二叉搜索樹的編碼和解碼描述:
編碼:即將一個二叉搜索樹編碼,節點數值轉換為字符串
解碼:即將一個字符串解碼,數值轉換為對應的二叉搜索樹的節點
過程導圖如下:
針對性編碼實現如下:
/*數字轉字符串*/
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
總結
以上是生活随笔為你收集整理的二叉树:二叉搜索树的编码和解码的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: qq网名2017最火
- 下一篇: 二叉树:二叉搜索树实现 逆序数问题