树是递归定义的,因此,对于以树形为存储结构的数据,处理的算法首先想到的是递归。


树分二叉树和普通树,普通树可以转换为二叉树

【存储结构】

1、二叉树

(1)顺序存储

按完全二叉树的格式进行存储,如若不是完全二叉树,丢失的节点所相应的存储数组单元值为‘0’

(2)链式存储

含有左右孩子指针(有的含有双亲指针)的存储结构

(3)线索二叉树

比普通二叉树多了2个数据域,LTag和RTag,当一个节点的左或右指针域没有下挂节点时,分别指向前驱和后继节点

2、普通树

(1)双亲存储方式:

以顺序数组存储的方式开辟存储空间,节点内有一个域里包含双亲的位置信息,也就是数组的编号

(2)孩子存储方式

先根据树的层数创建一个指针数组,每个指针指向这一个层级的首个孩子,孩子之间才用链表式结构,每个孩子节点只有next指针域和数据域,next域指向同层的下一个孩子

(3)孩子兄弟存储方式

这种存储方式也叫二叉树存储法,节点含2个指针,左指针指向下一个层次的首个孩子,右指针指向同一层次的孩子(兄弟)节点

(可以用动态分配空间的方式一个一个节点地初始化)

3、霍夫曼树

毫无疑问链式结构,用动态存储的方式处理最好(用顺序存储也是可以的,但顺序存储有诸多不便,删除什么的,尽量少用)

首先建立哈夫曼树

再次生成哈夫曼编码,根据树生成编码有两种思路

(1)从叶子往根寻找双亲节点

(2)从根往叶子遍历


【算法】

树的建立和遍历有【递归】和【非递归】

【递归】隐式使用栈数据结构,比较清晰,树的定义就是递归的

【非递归】显式使用栈数据结构


遍历的话分(根)前序,中序,后续三种。采用递归的方式或者采用非递归+显式栈的方式实现


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值