关于二叉树转化及其二进制流
vb吧
全部回复
仅看楼主
level 11
余思培 楼主
通过二进制流储存二叉树结构,以及将二进制流反构造为二进制。
利用的是先序遍历方法。
先图示,再代码。
//ps:暂不在家,代码回家再说
2022年01月24日 05点01分 1
level 11
余思培 楼主
用二进制流储存二进制结构
2022年01月24日 05点01分 2
level 11
余思培 楼主
二进制构造二叉树
2022年01月24日 05点01分 3
level 11
余思培 楼主
@璐村惂鐢ㄦ埛_0748V5Z馃惥 楼中楼长度不够,另起一楼
实际上,我使用的方法基本吻合你的第二种思路。
参考二叉树的先序遍历,先寻找左子树,再寻找右子树,每一个二进制码始终表示的是下一个子树是左子树还是右子树,在反向构造时,每一个二进制码控制了构造左子树还是右子树(当前层无法构造时,向上层寻找能够构造二叉树,直到无法构造为止)。
在这个过程中,既弱化了叶结点的表现,但又能清晰的表达叶结点与中间结点。
同时这样的二进制流还有一个简单的校验方法(针对完全二叉树),必定是以0开始,1终止,并且0与1的数量是保持平衡的。
2022年01月25日 03点01分 8
你的这个艾特,今天百度才告诉我,哈哈哈哈哈
2022年04月29日 12点04分
@璐村惂鐢ㄦ埛_0748V5Z馃惥 百度是这样,有时很久才能看到一条消息[滑稽],另外不出意外我这个帖子还有几楼是只有我看得到,而其他人看不到的这种半吞不吞的楼
2022年04月29日 12点04分
@余思培 嗯,我看着现在还缺6、9、12三层楼。夹层缺的就不知道了
2022年04月29日 12点04分
level 11
余思培 楼主
另外,关于Pop和Push是自己写的一个模拟堆栈的弹出和压入函数
2022年01月29日 07点01分 10
level 11
余思培 楼主
我!
2022年01月29日 07点01分 11
level 11
余思培 楼主
2022年01月29日 07点01分 13
level 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)
2022年01月29日 07点01分 14
1