提示:本篇章主要讲解数据结构中树的相关知识。
文章目录
- 中序(根)遍历二叉树(LTR)
- 后序(根)遍历二叉树(LRT)
- 中根遍历二叉树的递归算法 (重要)
- 后序遍历二叉树的递归算法 (重要)
- 二叉树的遍历练习
- 选择题
中序(根)遍历二叉树(LTR)
遍历口诀:(左根右)
中根遍历二叉树的递归定义为:若二叉树非空,则:
(1) 按中根次序遍历左子树;
(2) 访问根结点;
(3) 按中根次序遍历右子树;否则,遍历结束。
后序(根)遍历二叉树(LRT)
遍历口诀:(左右根)
后根遍历的递归定义为:若二叉树非空,则:
(1) 按后根次序遍历左子树;
(2) 按后根次序遍历右子树;
(3)访问根结点;
否则,遍历结束
如图所示:
中序遍历的顺序为:DBEGACF
后序遍历的顺序为:DGEBFCA
中序遍历为:dgbaechif
中序遍历为:gdbeihfca
中根遍历二叉树的递归算法 (重要)
将访问根结点的操作简化为输出根结点的值
void Inorder( BTNode * bt ){ /* 中序遍历算法以bt为根的二叉树 */ if (bt) { Inorder(bt->lchild) ; /*中根遍历左子树*/ printf(bt->data) ; /* 访问根结点 */Inorder(bt->rchild) ; /* 中根遍历右子树*/ }}
后序遍历二叉树的递归算法 (重要)
void Postorder(BTNode *bt {/*后序遍历二叉树bt的递归算法 */
if (bt) { Postorder(bt->lchild);Postorder(bt->rchild);printf(bt->data);}}
二叉树的遍历练习
接下来看下图所示的完全二叉树,三种遍历二叉树的顺序如下,你会了吗?
选择题
1.在完全二叉树中,若一个结点没有(A ),则它必定是叶子结点。
A 左子结点 B右子结点 C兄弟 D左子结点或右子结点
2.在一个非空二叉树的中根遍历序列中,根结点的右边(D )
A 只有左子树上的所有结点 B 只有左子树上的部分结点
C 只有右子树上的部分结点 D 只有右子树上的所有结点
3.任何一棵二叉树的叶子结点在先根、中根和后根遍历序列中的相对次序(B)
A 发生变化 B不发生变化 C不能确定 D以上都不对