二叉树的先序、中序、后序遍历(删除树有问题)

来源:互联网 发布:查询数据库中重复记录 编辑:程序博客网 时间:2024/04/27 20:58
#include <iostream>using namespace std;//定义一个树节点struct CharNode{    char data;    CharNode *pLeft;    CharNode *pRight;};//创建一个树节点CharNode *CreateNode(char ndata){    CharNode *pNode = new CharNode;    pNode -> data = ndata;    pNode -> pLeft = NULL;    pNode -> pRight = NULL;    return pNode;}//连接结点void ConnectNode(CharNode *pNode1, CharNode *pNode2, CharNode *pNode3){    pNode1 -> pLeft = pNode2;    pNode1 -> pRight = pNode3;}//释放二叉树的空间void FreeSpace(CharNode *pRoot){    if(pRoot != NULL)    {        FreeSpace(pRoot -> pLeft);        FreeSpace(pRoot -> pRight);        delete pRoot;    }}//二叉树的删除void DestroyTree(CharNode *root){    if(root -> pLeft == NULL && root -> pRight == NULL)    {        delete root;        return;    }    if(root -> pLeft)    DestroyTree(root -> pLeft);    if(root -> pRight)    DestroyTree(root -> pRight);    delete root;}//输出函数void PrintChar(char &c){    cout << c;}//递归实现(函数实现过程中,什么时候访问根结点,visit()放在什么位置)//先序遍历void PreOrder(CharNode *root, void(*visit)(char &item)){    if(root)    {        visit(root -> data);        PreOrder(root -> pLeft, visit);        PreOrder(root -> pRight, visit);    }}//中序遍历void MiddleOrder(CharNode *root, void(*visit)(char &item)){    if(root)    {        MiddleOrder(root -> pLeft, visit);        visit(root -> data);        MiddleOrder(root -> pRight, visit);    }}//后续遍历void PostOrder(CharNode *root, void(*visit)(char &itmem)){    if(root)    {        PostOrder(root -> pLeft, visit);        PostOrder(root -> pRight, visit);        visit(root -> data);    }}int main(){    CharNode *pNode1 = CreateNode('A');    CharNode *pNode2 = CreateNode('B');    CharNode *pNode3 = CreateNode('C');    CharNode *pNode4 = CreateNode('D');    CharNode *pNode5 = CreateNode('E');    CharNode *pNode6 = CreateNode('F');    CharNode *pNode7 = CreateNode('G');    CharNode *pNode8 = CreateNode('H');    CharNode *pNode9 = CreateNode('I');    ConnectNode(pNode1, pNode2, pNode3);    ConnectNode(pNode2, pNode4, pNode5);    ConnectNode(pNode3, pNode5, pNode6);    ConnectNode(pNode5, pNode7, NULL);    ConnectNode(pNode6, pNode8, pNode9);    PreOrder(pNode1, PrintChar);    cout << endl;    MiddleOrder(pNode1, PrintChar);    cout << endl;    PostOrder(pNode1, PrintChar);    cout << endl;    //DestroyTree(pNode1);    FreeSpace(pNode1);    return 0;}

原创粉丝点击