如何用C语言实现层次遍历二叉树?

Python032

如何用C语言实现层次遍历二叉树?,第1张

下面是c语言的前序遍历二叉树的算法,在这里假设的节点元素值假设的为字符型,

说明:算法中用到了结构体,也用到了递归的方法,你看看怎么样,祝你好运!

#include"stdio.h"

typedef

char

elemtype

typedef

struct

node

//定义链表结构

{

elemtype

data

//定义节点值

struct

note

*lchild

//定义左子节点值

struct

note

*rchild

//定义右节点值

}btree

preorder(btree

*root)

//前序遍历

{

if(roof!=null)

//如果不是空节点

{

printf("%c\n",root->data)

//输出当前节点

preorder(root->lchild)

//递归前序遍历左子节点

preorder(root->rchild)

//递归前序遍历右子节点

}

return

//结束

}

#include<iostream>

using

namespace

std

#define

OK

1

#define

ERROR

0

#define

OVERFLOW

-1

typedef

int

Status

typedef

char

TElemType

typedef

struct

TreeNode{

//定义的树结点

TElemType

Data

struct

TreeNode

*lchild,*rchild

}TreeNode,*Treep

Treep

CreateTree(Treep

&T)

//使用先序遍历优势创建

{

char

ch

//

cout<<"\n请你输入你要创建的树元素:"

cin>>ch

if(ch

==

'#')

//若是"#",代表该节点为空

T

=

NULL

else

{

T

=

new

TreeNode

//申请空间

if(!T)

return

ERROR

//空间申请失败返回错误信息

T->Data

=

ch

//键盘输入结点信息

CreateTree(T->lchild)

//递归调用创建左子树

CreateTree(T->rchild)

//递归调用创建右子树

}

return

T

}

void

TreeTreaverseF(Treep

T)

//二叉树先序遍历

{

if(T)

{

cout<<T->Data

//输出根节点值

TreeTreaverseF(T->lchild)

//递归调用输出左子树

TreeTreaverseF(T->rchild)

//递归调用输出右子树

}

}

void

TreeTreaverseS(Treep

T)

//中序遍历二叉树

{

if(T)

{

TreeTreaverseS(T->lchild)

//递归调用输出左子树

cout<<T->Data

//输出左节点

TreeTreaverseS(T->rchild)

//递归调用输出右子树

}

}

void

TreeTreaverseT(Treep

T)

{

if(T)

{

TreeTreaverseT(T->lchild)

//递归调用输出左子树

TreeTreaverseT(T->rchild)

//递归调用输出右子树

cout<<T->Data

//输出右节点

}

}

int

main()

{

Treep

T=NULL

cout<<"\n开始创建树状结构...\n"

cout<<"\n各元素以空格隔开\n"

CreateTree(T)

cout<<"\n先序遍历输出树...\n"

TreeTreaverseF(T)

cout<<endl<<endl

cout<<"\n中序遍历输出树...\n"

TreeTreaverseS(T)

cout<<endl<<endl

cout<<"\n后序遍历输出树...\n"

TreeTreaverseT(T)

cout<<endl<<endl

return

0

}