这是我参与2022首次更文挑战的第28天,活动详情查看:2022首次更文挑战
树的遍历: 按一定顺序对树中每个结点逐个进行访问一次,用以查找具有某一特点的结点或者全部结点,然后对这些满足条件的结点进行处理,这种操作就是树的遍历。
二叉树的遍历
- 前序遍历
原则是:若被遍历的二叉树非空,则按如下顺序进行遍历:- 访问根结点
- 以前序遍历方式遍历根结点的左子树
- 以前序遍历方式遍历根结点的右子树
遍历过程是个递归过程,主要表现在遍历任何一棵子树时仍然是先访问子树的根结点,然后遍历子树根结点的左子树,最后遍历子树根结点的右子树。即在前序遍历过程中,对结点的处理是在它的孩子结点被处理之前进行的
void PREORDER(BTREE T)
{
// T为二叉树根结点所在链结点的地址
if (T != NULL) {
VISIT(T); // 访问T所指结点
PREORDER(T->lchild); // 遍历T所指结点的左子树
PREORDER(T->rchild); // 遍历T所指结点的右子树
}
}
- 中序遍历
原则是:若被遍历的二叉树非空,则按如下顺序进行遍历- 以中序遍历方式遍历根结点的左子树
- 访问根结点
- 以中序遍历方式遍历根结点的右子树
void INORDER(BTREE T)
{
// T为二叉树根结点所在链结点的地址
if (T != NULL) {
INORDER(T->lchild); // 遍历T所指结点的左子树
VISIT(T); // 访问T所指结点
INORDER(T-rchild); // 遍历T所指结点的右子树
}
}
- 后序遍历
原则是:若被遍历的二叉树非空,则按如下顺序进行遍历- 以后序遍历方式遍历根结点的左子树
- 以后序遍历方式遍历根结点的右子树
- 访问根结点
void POSTORDER(BTREE T)
{
// T为二叉树根结点所在链结点的地址
if (T != NULL) {
POSTORDER(T->lchild); // 遍历T所指结点的左子树
POSTORDER(T->rchild); // 遍历T所指结点的右子树
VISIT(T); // 访问T所指结点
}
}
二叉树的等价性
- 二叉树的相似问题
- 等价性问题
如果说二叉树T1与二叉树T2是相似的,则是指他们具有相同的拓扑结构。也就是说,要么它们都是空二叉树,要么它们都不空,并且它们的左、右子树都分别相似。