网页资讯视频图片知道文库贴吧地图采购
进入贴吧全吧搜索

 
 
 
日一二三四五六
       
       
       
       
       
       

签到排名:今日本吧第个签到,

本吧因你更精彩,明天继续来努力!

本吧签到人数:0

一键签到
成为超级会员,使用一键签到
一键签到
本月漏签0次!
0
成为超级会员,赠送8张补签卡
如何使用?
点击日历上漏签日期,即可进行补签。
连续签到:天  累计签到:天
0
超级会员单次开通12个月以上,赠送连续签到卡3张
使用连续签到卡
06月05日漏签0天
vb吧 关注:156,133贴子:1,166,132
  • 看贴

  • 图片

  • 吧主推荐

  • 游戏

  • 14回复贴,共1页
<<返回vb吧
>0< 加载中...

关于二叉树转化及其二进制流

  • 只看楼主
  • 收藏

  • 回复
  • 余思培
  • 网络通信
    11
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
通过二进制流储存二叉树结构,以及将二进制流反构造为二进制。
利用的是先序遍历方法。
先图示,再代码。
//ps:暂不在家,代码回家再说


  • 余思培
  • 网络通信
    11
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
用二进制流储存二进制结构


2025-06-05 18:01:44
广告
  • 余思培
  • 网络通信
    11
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
二进制构造二叉树


  • 深邃的爱
  • 递归爆栈
    7
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
刘明


  • 璐村惂鐢ㄦ埛_0748V5Z馃惥
  • 网络通信
    11
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
昨天看了帖子,想到今天,有一点感想,与你探讨。
一、我觉得,在二进制的条件下,有两个思路。
1.转换过程简洁,这个方法立足于思路简单,将转换的方式作为根本,但必然的转换结果占用空间大。主要思路就是按照第一层1位、第二层2位、第三层4位、第四层8位、第五层16位……不管分支的分布,就这样0表示无、1表示有,一直铺下去。
2.数据size优先,就是将生成的“二进制流”的占用空间,作为根本考虑,必然的转换的规则和思路就复杂一点。跟上面不一样的是,叶节点之下就不再生成数据,转换中就是要判断是否是叶节点。
3.介于两者之间将两分支组合成4种情况,占用2位二进制位(本质上应该视为四进制)。二、其他
1.如果用三进制,会更方便。双子的父节点用一种状态,单子的父节点用一种状态,叶节点用一种状态。
2.我认为最关键的是“建立映射规则”。有了清晰的映射规则,就好办;规则不清晰,就难办;不同的规则,效率不同;不同的规则,结果也不同。


  • 璐村惂鐢ㄦ埛_0748V5Z馃惥
  • 网络通信
    11
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼


  • 余思培
  • 网络通信
    11
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
@璐村惂鐢ㄦ埛_0748V5Z馃惥 楼中楼长度不够,另起一楼
实际上,我使用的方法基本吻合你的第二种思路。
参考二叉树的先序遍历,先寻找左子树,再寻找右子树,每一个二进制码始终表示的是下一个子树是左子树还是右子树,在反向构造时,每一个二进制码控制了构造左子树还是右子树(当前层无法构造时,向上层寻找能够构造二叉树,直到无法构造为止)。
在这个过程中,既弱化了叶结点的表现,但又能清晰的表达叶结点与中间结点。
同时这样的二进制流还有一个简单的校验方法(针对完全二叉树),必定是以0开始,1终止,并且0与1的数量是保持平衡的。


  • 余思培
  • 网络通信
    11
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
另外,关于Pop和Push是自己写的一个模拟堆栈的弹出和压入函数


2025-06-05 17:55:44
广告
  • 余思培
  • 网络通信
    11
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
我!


  • 余思培
  • 网络通信
    11
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼



  • 余思培
  • 网络通信
    11
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
代码图发不出,我!
调用:
Dim dwCode&(), dwVal&()
Call ExtractTree(dwVal, dwCode)
Dim bSteam() As Byte
Call GetTreeStru(bSteam)
sOut = sOut & vbCrLf & "【二进制流构造二叉树】" & vbCrLf
Dim tTest() As ProcData
ReDim tTest(dwCount * 2 - 1) As ProcData
For i = 1 To dwCount * 2 - 2
tTest(i).dwFREQ = bSteam(i)
Next
For i = 1 To dwCount
tTest(i).dwValue = dwVal(i)
Next
Call mHuffman.ProcByBytes(tTest, dwCount)


登录百度账号

扫二维码下载贴吧客户端

下载贴吧APP
看高清直播、视频!
  • 贴吧页面意见反馈
  • 违规贴吧举报反馈通道
  • 贴吧违规信息处理公示
  • 14回复贴,共1页
<<返回vb吧
分享到:
©2025 Baidu贴吧协议|隐私政策|吧主制度|意见反馈|网络谣言警示