数据结构与算法简记:按层次顺序遍历和存储二叉树

本文介绍了如何按层次顺序遍历二叉树,并详细阐述了如何根据二叉树生成层次顺序存储的数据,特别是针对满二叉树的情况。在层次遍历过程中,从根节点开始,依次访问节点及其左右子树。而在层次存储时,为确保所有位置都被占用,用特殊符号占位空节点。最后,提供了一个JavaScript实现的例子,利用数组作为队列进行操作。
摘要由CSDN通过智能技术生成

前面曾经记录过,给出一个按层次顺序排放的存储数据,进而可以构建出一棵二叉树,今天就来简单记录一下,如何按层次顺序遍历二叉树,最后又如何根据二叉树生成按层次顺序存储的数据,对于满二叉树来讲,这十分有必要。

对与这棵二叉树来说,它的层次遍历顺序和层次存储顺序分别为:

A B E C D F
A B E C D # F

按层次遍历思路:

  1. 首先将根节点放入队列。
  2. 取出队首元素并访问该节点,然后探索其左子树,如果左子树不为空,则重复步骤1,之后再探索右子树,如果右子树不为空,则同样重复步骤1。
  3. 重复步骤2。

按层次存储思路:

上面的按层次遍历不能用来存储,原因是某些位置的空节点直接被跳过了,如果我们想要生成一份用来存储的数据,这些节点必须使用特殊符号占位的,所以需要在原来基础上稍作改动:

  1. 对于一个节点来讲,如果不存在左子节点,则将一个占位节点放入队列,同样,如果不存在右子节点,则将一个占位节点放入队列。
  2. 在取出队首元素后,如果这个节点是占位节点,则无需探索左右子节点,直接进行下一轮遍历。
  3. 遍历完成后,存储数据的末端会有一些冗余的占位节点,移除即可。

还是先来个JS版的吧,JS中的数组是天然的队列,再方便不过了:

<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值