赞
踩
在存储二叉树之前要先给二叉树节点排号,排号方法是:根节点为1,左孩子节点为2i+1,右孩子节点为2i+1.创建存储空间的时候,空节点也是需要标注出来的,所以创建的存储空间大小为排号最大的节点数
编号规则:
顺序存储结构:
对于完全二叉树或者满二叉树(满二叉树一定是完全二叉树),不存在空孩子 刚好存满
对于一般二叉树:
对于单支二叉树:
遍历:每个节点都被访问且只被访问一次
D表示根节点,L表示左子树,R表示右子树
遍历方法有三种:先序中序和后序
1、先序遍历算法:
文字描述:先序遍历算法先遍历根节点,然后遍历左子树,最后遍历右子树
先遍历根节点A,然后遍历根节点A的左子树"1","1"子树的根节点为B,”1“的左子树为“2”,”1“的右子树为空,“2”子树的根节点为D,“2”子树的左子树为空,”2“的右子树为叶子节点G。这样A根节点和A的左子树遍历完了,再看A的右子树为”4“,”4“的左子树为叶子节点E,”4“的右子树为叶子节点F。所以最后的顺序就是:A B D G C E F,这样按照先序遍历算法就将整棵树遍历完了。
代码实现:
若非空,先访问root的数据,然后访问root的左子树,然后访问root的右子树,其中visit函数可以是自己设定的访问方法,可以打印出root的数据也可以添加到数组中
2、中序遍历算法
文字描述如下:中序遍历算法先遍历左子树,然后遍历根节点,最后遍历右子树。
先遍历根节点的左子树”1“,对于”1“子树同样先遍历其根节点的左子树”2“,对于”2“子树其左子树为空,然后访问”2“子树的根节点D,然后访问”2“子树的右子树G,那么对”2“子树就遍历完了,然后遍历”2“子树的根节点B,B的右子树为空,然后遍历”1“子树的根节点A,这样根节点的左子树和根节点都遍历完了。现在开始遍历A的右子树”4“,”4“的左子树为E根节点为C右子树为F,所以总的遍历顺序为 D G B A E C F.
3、后序遍历算法
文字描述:后序遍历先遍历左子树,然后遍历右子树,最后遍历根节点。
先遍历左子树”1“,”1“子树同样先遍历左子树”2“,”2“的左子树为空,右子树为叶子节点G,然后遍历”2“子树的根节点D,然后遍历”1“子树的右子树为空,最后遍历“1”子树的根节点B。这样A的左子树就遍历完了,接下来遍历A的右子树"4",“4”的左子树为叶子节点E“4”子树的右子树为叶子节点F,然后遍历“4”子树的根节点C,最后遍历整棵树的根节点A,所以总的遍历过程为 G D B E F C A
练习:
参考连接:https://www.icourse163.org/learn/XIYOU-1002578005?tid=1002984001#/learn/content
相关考题主要是给出先序遍历和中序遍历或者给出中中序遍历和后续遍历让你求另外一个遍历结果,方法就是找到头结点即可,不断拆分左右子树,再循环找头结点,可以参考:https://blog.csdn.net/qq_40172610/article/details/82720678
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。