【问题描述】
二叉树采用二叉链表作存储结构,编程实现二叉树的如下基本操作:
1. 按先序序列构造一棵二叉链表表示的二叉树T;
2. 对这棵二叉树进行遍历:先序、中序、后序以及层次遍历序列,分别输出结点的遍历序列;
3. 求二叉树的深度/结点数目/叶结点数目;
4. 将二叉树每个结点的左右子树交换位置。
【数据描述】
//- - - - - - 二叉树的二叉链表存储表示 - - - - - - -
typedef struct BiTNode{
TElemType data;
Struct BiTNode * lchild, * rchild; //左右孩子指针
}BiTNode, * BiTree;
【算法描述】
1. 建立一棵二叉树
Status CreateBiTree(BiTree &T)
//按先序次序输入二叉树中结点的值(一个字符),#字符表示空树,
//构造二叉链表表示的二叉树T。
scanf(&ch);
if (ch=='#') T=NULL;
else {
if (!(T=(BiTNode *) malloc(sizeof(BiTNode)))) exit (OVERFLOW);
T->data = ch; //生成根结点
CreateBiTree(T->lchild); //生成左子树
CreateBiTree(T->rchild); //生成右子树
}
return OK;
}//CreateBiTree
2. 先序遍历二叉树递归算法
Status PreOrderTraverse(BiTree T,Status(* Visit)(TElemType e)){
//采用二叉链表存储结构,Visit是对数据元素操作的应用函数,
//先序遍历二叉树T,对每个结点调用函数Visit一次且仅一次。
//一旦visit()失败,则操作失败。
if (T){
if (Visit(T->data))
if (PreOrderTraverse(T->rchild,Visit)) return OK;
return ERROR;
}else return OK;
}// PreOrderTraverse
二叉树采用二叉链表作存储结构,编程实现二叉树的如下基本操作:
1. 按先序序列构造一棵二叉链表表示的二叉树T;
2. 对这棵二叉树进行遍历:先序、中序、后序以及层次遍历序列,分别输出结点的遍历序列;
3. 求二叉树的深度/结点数目/叶结点数目;
4. 将二叉树每个结点的左右子树交换位置。
【数据描述】
//- - - - - - 二叉树的二叉链表存储表示 - - - - - - -
typedef struct BiTNode{
TElemType data;
Struct BiTNode * lchild, * rchild; //左右孩子指针
}BiTNode, * BiTree;
【算法描述】
1. 建立一棵二叉树
Status CreateBiTree(BiTree &T)
//按先序次序输入二叉树中结点的值(一个字符),#字符表示空树,
//构造二叉链表表示的二叉树T。
scanf(&ch);
if (ch=='#') T=NULL;
else {
if (!(T=(BiTNode *) malloc(sizeof(BiTNode)))) exit (OVERFLOW);
T->data = ch; //生成根结点
CreateBiTree(T->lchild); //生成左子树
CreateBiTree(T->rchild); //生成右子树
}
return OK;
}//CreateBiTree
2. 先序遍历二叉树递归算法
Status PreOrderTraverse(BiTree T,Status(* Visit)(TElemType e)){
//采用二叉链表存储结构,Visit是对数据元素操作的应用函数,
//先序遍历二叉树T,对每个结点调用函数Visit一次且仅一次。
//一旦visit()失败,则操作失败。
if (T){
if (Visit(T->data))
if (PreOrderTraverse(T->rchild,Visit)) return OK;
return ERROR;
}else return OK;
}// PreOrderTraverse