二叉搜索树的编码和解码描述:
编码:即将一个二叉搜索树编码,节点数值转换为字符串
解码:即将一个字符串解码,数值转换为对应的二叉搜索树的节点

过程导图如下:

针对性编码实现如下:

/*数字转字符串*/
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

二叉树:二叉搜索树的编码和解码相关推荐

  1. C++数据结构和算法2 栈 双端/队列 冒泡选择插入归并快排 二三分查找 二叉树 二叉搜索树 贪婪 分治 动态规划

    C++数据结构和算法2 栈 双端/队列 冒泡选择插入归并快排 二三分查找 二叉树 二叉搜索树 贪婪 分治 动态规划 博文末尾支持二维码赞赏哦 _ github 章3 Stack栈 和 队列Queue= ...

  2. [二叉树]二叉搜索树转换为双向链表(剑指Offer26)

    [试题描述] 将二叉搜索树转换为双向链表 对于二叉搜索树,可以将其转换为双向链表,其中,节点的左子树指针在链表中指向前一个节点,右子树指针在链表中指向后一个节点. 思路一: 采用递归思想,对于二叉搜索 ...

  3. 【学透二叉树-二叉搜索树(二叉树)的最近公共祖先】

    示例: 代码实现: class Solution {public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q ...

  4. LeetCode刷题笔记 二叉树 二叉搜索树的操作

    669 修剪二叉搜索树 ​ 给定一个二叉查找树和两个整数 L 和 R,且 L < R,试修剪此二叉查找树,使得修剪后所有节点的值都在 [L, R] 的范围内. ​ 输入是一个二叉查找树和两个整数 ...

  5. 二叉树--二叉搜索树

    一直对AVL这个英文缩写比较困惑,原来一直以为是平衡二叉树的首字母缩写,但是又想不明白,哈!前段时间才明白原来是种这课树的三个人的名字的首字母的,哎,生活处处有惊喜,无知不可怕,现在我也知道了.废话不 ...

  6. 五.树,二叉树,二叉搜索树(BST)和自平衡二叉搜索树(AVL)

    1.树 树是一种数据结构 比如:目录结构 树是一种可以递归定义的数据结构 树是由n个节点组成的集合: 如果 n=0, 那这是一颗空树 如果 n>0, 那存在1个节点作为树的根节点,其他节点可以分 ...

  7. 二叉搜索树的简明实现(ES5 ES6)

    二叉树 & 二叉搜索树 二叉树(Binary Tree)是 n(n >= 0)个节点的有限集合,集合为空集时,叫作空二叉树:不为空时,由根节点及左子树.右子树组成,左子树.右子树也都是二 ...

  8. 二叉搜索树的深度与搜索效率图解

    二叉搜索树的深度与搜索效率 二叉搜索树也可称为二叉查找树,它的常用方法可以参考:二叉查找树 我们在树, 二叉树, 二叉搜索树中提到,一个有n个节点的二叉树,它的最小深度为log(n),最大深度为n.比 ...

  9. 【数据结构】树与树的表示、二叉树存储结构及其遍历、二叉搜索树、平衡二叉树、堆、哈夫曼树与哈夫曼编码、集合及其运算

    1.树与树的表示 什么是树? 客观世界中许多事物存在层次关系 人类社会家谱 社会组织结构 图书信息管理 分层次组织在管理上具有更高的效率! 数据管理的基本操作之一:查找(根据某个给定关键字K,从集合R ...

最新文章

  1. WMI技术介绍和应用——查询环境变量
  2. Could not find destination factory for transport解决方法
  3. 贴片按键开关_轻触开关的常用类型和规格型号
  4. php mysql结果集转数组,几种mysql查询结果转换为PHP数组的方法
  5. HCIE Secuirty 防火墙内容安全组合 备考笔记(幕布)
  6. 数据预处理第3讲:归一化与离散化
  7. PAT甲级1141 Ranking of Institutions
  8. 北京理工大学计算机学院acm赵曜,王一拙_北京理工大学计算机学院
  9. 软件定义网络实验之SDN网络简单管理及开发
  10. 中国计算机网络设备制造业总体趋势免费版,致自己的心灵鸡汤说说,句句经典,引人深思!...
  11. EXCEL数据计算结果不对
  12. Eve-NG No IP address on interface pnet0
  13. OWASP ZAP 扫描漏洞误报分析
  14. 微信小程序独家秘笈之抽奖大转盘
  15. Computer Architectrure: Quantitative Approch 第三章第十三节
  16. iphone,ipad模拟器截图(小方法)
  17. html 百度搜索图片,百度搜索结果显示图片
  18. python导入随机函数库_python之random库
  19. 十进制有限小数如何以二进制保存而不会变成无限小数
  20. 创新微MinewSemi厘米级定位精度的GNSS 模块—MS32SN4

热门文章

  1. [重磅] 让HTML5达到原生的体验 系列之中的一个 避免切页白屏
  2. Apache htaccess 重写假设文件存在!
  3. java.util.concurrent包API学习笔记
  4. shell与 .sh文件与 .bash文件
  5. mysql null 排前面_Mysql实现null值排在最前/最后的方法示例
  6. 连接状态_TCP 连接状态及相关命令学习
  7. linux中sort命令实例,Linux中文本处理工具之sort命令详解
  8. 设计一个扩展自抽象类geometricobject的新的triangle类_C++ 接口(抽象类)
  9. hashmap实现原理_Java中HashMap底层实现原理(JDK1.8)源码分析
  10. java 获取linux mac_java在linux获得ip地址和mac