二叉树:二叉搜索树的编码和解码
                                                            生活随笔
收集整理的這篇文章主要介紹了
                                二叉树:二叉搜索树的编码和解码
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.                        
                                二叉搜索樹的編碼和解碼描述:
 編碼:即將一個二叉搜索樹編碼,節點數值轉換為字符串
 解碼:即將一個字符串解碼,數值轉換為對應的二叉搜索樹的節點
過程導圖如下:
 
 針對性編碼實現如下:
/*數字轉字符串*/
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最火
 - 下一篇: 绝不放弃希望?