1、二叉树的储存表示
struct Node
{
char data;
};
typedef Node TElemType;
typedef struct BiTNode
{
TElemType data;
struct BiTNode* lchild, * rchild;
}BiTNode, * BiTree;
typedef int Status;
注意在进行对二叉树的操作时还要用到栈
2、创建二叉树(递归)
Status CreateBiTree(BiTree& T)
{
char ch;
cin >> ch;
if (ch == '0') {//输入0时视为空结点
T = NULL;
cout << "结点为空\n";
}
else
{
if (!(T = new BiTNode))exit(OVERFLOW);
T->data.data = ch;
cout << "该结点为:" << T->data.data << endl;
CreateBiTree(T->lchild);
CreateBiTree(T->rchild);
}
return OK;
}
注意在输入时按先序序列输入,这是一个按先序序列建立二叉树的过程
3、遍历二叉树
①先序遍历
Status PreOrderTraverse(BiTree T, Status(*Visit)(TElemType))
{//先序遍历二叉树T的递归算法
if (T)
{
if (Visit(T->data))
{
if (PreOrderTraverse(T->lchild, Visit))
{
if (PreOrderTraverse(T->rchild, Visit))return OK;
}
}
return ERROR;
}
else return OK;
}
②中序遍历
Status InOrderTraverse(BiTree T, Status(*Visit)(TElemType))
{
SqStack S;
InitStack(S,STACK_INIT_SIZE);
Push(S, T);
BiTree p;
while (!StackEmpty(S))
{
while (GetTop(S, p) && p)Push(S, p->lchild);
Pop(S, p);
if (!StackEmpty(S))
{
Pop(S, p);
if (!Visit(p->data))return ERROR;
Push(S, p->rchild);
}
}
return OK;
}
4、交换子树
Status ExchangeTree(BiTree T)
{
if (T)
{
BiTree tmp;
tmp = T->lchild;
T->lchild = T->rchild;
T->rchild = tmp;
ExchangeTree(T->lchild);
ExchangeTree(T->rchild);
return OK;
}
else return OK;
}