#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;
}
二叉树的先序、中序、后序遍历(删除树有问题)
最新推荐文章于 2021-04-08 11:37:56 发布