willsun888
9/20/2013 - 4:30 AM

二叉树的前序、中序和后序遍历

二叉树的前序、中序和后序遍历

//二叉树抽象数据类型的头文件
typedef struct BiTreeNode_{
    void *data;
    struct BiTreeNode_ *left;
    struct BiTreeNode_ *right;
}BiTreeNode;

typedef struct BiTree_{
    int size;
    void (*compare)(const void *key1,const void *key2);
    void (*destroy)(void *data);
    BiTreeNode* root;
}BiTree;

//遍历二叉树的实现函数
/* 前序遍历 */
int preorder(const BiTreeNode *node){
    if(node){
        //对结点的处理函数
        printNode(node);
        if(node->left)
             if(perorder(node->left)!=0)
                   return -1;
        if(node->right)
             if(perorder(node->right)!=0)
                   return -1;
        return 0;
    }
}

/* 中序遍历 */
int inorder(const BiTreeNode *node){
    if(node){
        if(node->left)
             if(inorder(node->left)!=0)
                   return -1;

        //对结点的处理函数
        printNode(node);

        if(node->right)
             if(inorder(node->right)!=0)
                   return -1;
        return 0;
    }
}

/* 后序遍历 */
int postorder(const BiTreeNode *node){
    if(node){
        if(node->left)
             if(postorder(node->left)!=0)
                   return -1;
        if(node->right)
             if(postorder(node->right)!=0)
                   return -1;
        //对结点的处理函数
        printNode(node);
        return 0;
    }
}