您的位置:首页 > 理论基础 > 数据结构算法

数据结构(9):二叉树的遍历、构建以及显示(凹入法)

2016-04-07 21:44 721 查看
1、前序遍历

/* 二叉树的前序遍历递归算法 */
void PreOrderTraverse(BiTree T)
{
if(T == NULL)
return;
cout<<T->data;      // 显示结点数据,可以更改为其他对结点操作
PreOrderTraverse(T->lchild);      // 再先序遍历左子树
PreOrderTraverse(T->rchild);      // 最后先序遍历右子树
}


2、中序遍历

/* 二叉树的中序遍历递归算法 */
void InOrderTraverse(BiTree T)
{
if(T == NULL)
return;
InOrderTraverse(T->lchild);   // 中序遍历左子树
cout<<T->data;      // 显示结点数据,可以更改为其他对结点操作
InOrderTraverse(T->rchild);   // 最后中序遍历右子树
}


3、后序遍历

/* 二叉树的后序遍历递归算法 */
void PosOrderTraverse(BiTree T)
{
if(T == NULL)
return;
PosOrderTraverse(T->lchild);      // 先后序遍历左子树
PosOrderTraverse(T->rchild);      // 再后序遍历右子树
cout<<T->data;      // 显示结点数据,可以更改为其他对结点操作
}


二叉树的构建

1、建立二叉树运用到的原理和遍历二叉树的一样,只是在原来应该是打印结点的地方改成了生成结点,给结点赋值而已。

例: 用前序遍历的方式实现二叉树的建立

/* 按前序输入二叉树中结点的值(一个字符) */
/* #表示空树,构造二叉链表表示二叉树T.  */
void CreateBiTree(BiTree &T)
{
TElemType ch;
cin>>ch;
if(ch == '#')
T = NULL;           // 递归结束,建空树
else                    // 递归创建二叉树
{
T = new BiTNode;    // 生成根结点
T -> data = ch;     // 根结点数据域置为ch
CreateBiTree(T -> lchild); // 递归创建左子树
CreateBiTree(T -> rchild); // 递归创建右子树
}
}

/*   先序凹入法显示二叉树 */
void ShowBiTree(BiTree T,int cc)        // cc的初值为 当前二叉树的结点数count
{
int i;
if(T)
{
//      右对齐输出:
//      int j;
//      for(i=0;i<count-cc;i++) cout<<" ";
//      for(j=0;j<cc;j++)       cout<<"#";
//      cout<<":"<<T->data<<endl;
cout<<T->data<<":";
for(i=0;i<cc;i++) cout<<"#";
cout<<endl;
cc--;
ShowBiTree(T->lchild,cc);
ShowBiTree(T->rchild,cc);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息