输出二叉树的宽度

这篇文章就是想记录一下输出二叉树的宽度的基本思路: 1,二叉树的宽度是指二叉树的所有层次中最多节点的层次的节点个数。由概念我们首先就可以排除递归的方法,因为它是由上至下的,而不是左到右的。 2,由概念知道我们最先的想法就是把每个层次的节点储存在一个数据结构中,然后把每个层次的节点数目统计出来,排序得到最大值。 2.1 如何识别储存节点的层次? 可以把节点的指针和节点所在的层次放在一个数据结构中。 2.2 节点储存在什么样的数据结构中? 这个数据结构应该有利于统计,有利于遍历树 最常规的想法是这样的数据结构应该是线性的 2.2.1 栈可以吗?队列可以吗? 两者都可以 2.2.2 以队列为例的存储过程 根节点加入队列,然后把根节点的左右节点分别加入队列。下一步是把根节点的左右节点再加入队列。 问题是怎么知道要加入谁的子节点呢?可以用一个队列头标志当前要加入子节点的节点指针。 再一个问题是如何知道遍历完了呢?可以设置一个队尾标志,如果对列头标志与对尾标志相等的话。那么就是表示遍历完成。 3 我们可不可以每次都只是计算某一个层次节点数。用一个标志表示当前的遍历的层次中最多的节点数。这样的话可以不用先保存所有的 过程可以是这样的:用两个栈。把第一层次的节点保存到某一栈中命名为1,顺便计算其节点数目。然后遍历保存有节点的栈,把节点的子节点保存到另外一个栈中命名为2,顺便计算节点数目。删除栈1中节点。然后依照这个过程,不断的遍历下去。结束~
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值