二叉树的遍历:
目的:得到树所有节点的一个线性排列
用途:是树结构插入,删除,修改,查找和排序运算的前提,是二叉树一切运算的基础和核心
(主要)遍历方法:
DLR(先访问根节点,再遍历左子树,再遍历右子树):先(根)序遍历,左子树和右子树的遍历和先序遍历一致,即先访问左子树的根节点,再按先序遍历依次查询,右子树也一样。一下遍历方式同理。得到的表达式为前缀表示
例:
顺序为ABDECF
具体的遍历过程如下:
LDR:中序遍历
得到的表达式为中缀表示
例:
具体的遍历过程如下:
LRD:后序遍历
得到的表达式为后缀表示
例:
具体的遍历过程如下:
由二叉树的先序序列和中序序列,或由二叉树的后序序列和中序序列可以确定唯一一颗二叉树
例:
先序:A B C D E F G H I J
中序:C D B F E A I H G J
由先序遍历可得,A为根节点,再结合中序序列,C D B F E在左子树上,I H G J在右子树上
由先序序列得B为左子树的根节点,再结合中序序列得C D在B的左子树上,F E在B的右子树上
由先序序列可得G为右子树的根节点,结合中序序列,I H在G左子树上,J在G的右子树上
由先序序列可得C为D的根节点,再结合中序序列,可得D在C的右子树上
同理可得E为根,F在E的左子树上;H为根,I在H左子树上
例:
中序:B D C E A F H G
后序:? D E C B H G F A
由后序遍历可得,A为根节点,结合中序遍历得BDCE在左子树上,FHG在右子树上
由后序遍历得,B为左子树的根节点,结合中序遍历的DCE在B的右子树上
由后序遍历得,C为根,再由中序遍历可得,D为C的左子树,E为C的右子树
由后序遍历得,F为根节点,有中序遍历得,HG在F右子树上
由后序遍历得,G为根,再由中序得,H在G得左子树上
先序遍历:
若二叉树为空,则空操作
若二叉树不为空,则先访问根节点,再先序遍历左子树,再先序遍历右子树
代码如下:
中序遍历:
?
后序遍历:
?
例:按顺序读入以下字符ABC##DE#G##F###(#指空结点)
代码如下:
如果是空树,则深度为0
否则,记左子树深度为m,右子树深度为n,比较后返回较大者加1
如果是空树,则节点个数为0
否则,节点个数为左子树的节点个数+右子树节点个数+1
如果是空树,则叶子节点个数为0
否则,返回左子树的叶子节点个数+右子树的叶子结点个数