遍历定义:顺着某一条搜索路径巡访二叉树中的结点,使得每个结点均被访问一次,而且仅被访问一次(又称周游)
    “访问”的含义很广,可以是对结点作各种处理,如:输出结点的信息、修改结点的数据值等,但要求各种访问不破坏原来的数据结构
    遍历目的:得到树的所有结点的一个线性排列
    遍历用途:它是树结构插入、删除、修改、查找和排列运算的前提,是二叉树一切运算的基础和核心
    遍历二叉树算法描述:
    假设:L-遍历左子树 D-访问根节点 R-遍历右子树
    若规定从左到右,则有三种情况:
    DLR——先(根)序遍历
    LDR——中(根)序遍历
    LRD——后(根)序遍历
    (1)先序遍历二叉树的操作定义:
    若二叉树为空,则空操作;否则
    1)访问根结点
    2)先序遍历左子树
    3)先序遍历右子树
    (2)中序遍历二叉树的操作定义:
    若二叉树为空,则空操作;否则
    1)中序遍历左子树
    2)访问根结点
    3)先序遍历右子树
    (3)后序遍历二叉树的操作定义:
    若二叉树为空,则空操作;否则
    1)后序遍历左子树
    2)后序遍历右子树
    3)访问根结点
    遍历的算法实现——先序遍历
    算法:
    Status PreOrderTraverse(BiTree T){
    if(T==NULL) return OK;//空二叉树
    else{
    visit(T);//访问根结点
    PreOrderTraverse(T->lchild);//递归遍历左子树
    PreOrderTraverse(T->rchild);//递归遍历右子树
    }
    }
    遍历的算法实现——中序遍历
    算法:
    Status InOrderTraverse(BiTree T){
    if(T==NULL) return OK;//空二叉树
    else{
    InOrderTraverse(T->lchild);//递归遍历左子树
    visit(T);//访问根结点
    InOrderTraverse(T->rchild);//递归遍历右子树
    }
    }
    遍历的算法实现——后序遍历
    算法:
    Status PostOrderTraverse(BiTree T){
    if(T==NULL) return OK;//空二叉树
    else{
    PostOrderTraverse(T->lchild);//递归遍历左子树
    PostOrderTraverse(T->rchild);//递归遍历右子树
    visit(T);//访问根结点
    }
    }
    遍历算法的分析:
    如果去掉输出语句,从递归的角度看,三种算法是完全相同的,或说这三种算法的访问路径是相同的,只是访问结点的时机不同
    时间效率:O(n)//每个结点只访问一次
    空间效率:O(n)//栈占用的最大辅助空间