一、基础知识
1、 遍历二叉树概念:如何按某条搜索路径寻访树中每个结点,使得每个结点均被访问一次,而且仅被访问一次。
2、遍历二叉树限定先左后右,则有三种情况先(根)序遍历,中(根)序遍历和后(根)序遍历
先序遍历二叉树定义操作
若二叉树为空,则空操作;否则:
a、访问根节点
b、先序遍历左子树
c、先序遍历右子树
//先序遍历
void PreOrderTraverse(BiTree T) { if (T) { printf("%c",T->data); PreOrderTraverse(T->leftChild); PreOrderTraverse(T->rightChild); } }
中序遍历二叉树定义操作
若二叉树为空,则空操作;否则
a、中序遍历左子树
b、访问根结点
c、中序遍历右子树
//中序遍历
void InOrderTraverse(BiTree T) { if (T) { InOrderTraverse(T->leftChild); printf("%c",T->data); InOrderTraverse(T->rightChild); } }
后序遍历二叉树定义操作
若二叉树为空,则空操作;否则
a、后序遍历左子树
b、后序遍历右子树
c、访问根结点
//后序遍历
void PostorderTraverse(BiTree T) { if (T) { PostorderTraverse(T->leftChild); PostorderTraverse(T->rightChild);
printf("%c",T->data);
} }
3、遍历实例
![](https://images0.cnblogs.com/blog2015/527522/201507/151623061888725.jpg)
先序遍历:-+a*b-cd/ef;
中序遍历:a+b*c-d-e/f
后序遍历:abcd-*+ef/-