对于如何创建二叉树,假设我们要在内存中生成图6-9-1左一样的二叉树,为了确认每个结点是否都有左右孩子 ,我们对每个结点都进行扩展,如下右图,也就是把每个结点的空指针都引出一个虚结点,可以随意赋一个值。
二叉树遍历的方法有:
前序遍历
void setplay(BiTree *T)
{
if (T->data==NULL)
return;
cout << T->data;
setplay(T->lchild);
setplay(T->rchlid);
}
中序遍历
void setplay(BiTree *T)
{
if (T->data==NULL)
return;
setplay(T->lchild);
cout << T->data;
setplay(T->rchlid);
}
后序遍历
void setplay(BiTree *T)
{
if (T->data==NULL)
return;
setplay(T->lchild);
setplay(T->rchlid);
cout << T->data;
}
我们在此展示遍历的完整代码,采用递归的方式,每一种遍历,都可以只改变输出和递归时的顺序来实现。
代码:
#include<iostream>
using namespace std;
struct BiTree
{
BiTree *lchlid;//指向左孩子
BiTree *rchlid;//指向右孩子
char data;
};
void createBiTree(BiTree *T)
{
char ch;
cin >> ch;
if (ch == '#')
T->data = NULL;
else
{
T->data = ch;
BiTree *TL = new BiTree();
T->lchlid = TL;
BiTree *TR = new BiTree();
T->rchlid = TR;
createBiTree(T->lchlid);
createBiTree(T->rchlid);
}
}
void preordertreafer(BiTree *T)
{
if (T->data == NULL)
return;
cout << T->data << endl;
preordertreafer(T->lchlid);
preordertreafer(T->rchlid);
}
int main()
{
BiTree *T;
T = new BiTree();
createBiTree(T);
preordertreafer(T);
return 0;
}