数据结构8606二叉树的构建及遍历操作

更新时间:2023-10-24 12:27:02 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

#include \#include \#define TRUE 1 #define FALSE 0 #define OK 1 #define ERROR 0 #define INFEASIBLE -1 #define OVERFLOW -2 typedef int Status;

typedef char ElemType; typedef struct BiTNode {

ElemType data;

struct BiTNode *lchild,*rchild;//左右孩子指针 } BiTNode,*BiTree;

Status CreateBiTree();

Status CreateBiTree(BiTree &T) // 算法6.4 {

// 按先序次序输入二叉树中结点的值(一个字符),’#’字符表示空树, // 构造二叉链表表示的二叉树T。 char ch;

scanf(\ if (ch=='#') T = NULL; else {

if (!(T = (BiTNode *)malloc(sizeof(BiTNode)))) return ERROR; T->data=ch; // 生成根结点

CreateBiTree(T->lchild); // 构造左子树 CreateBiTree(T->rchild); // 构造右子树 }

return OK; } // CreateBiTree

Status PrintElement( ElemType e ) // 输出元素e的值 {

printf(\ return OK; }// PrintElement

Status PreOrderTraverse( BiTree T, Status(*Visit)(ElemType) )

{

if(T==NULL) return 0; Visit( T->data );

PreOrderTraverse(T->lchild,Visit); PreOrderTraverse(T->rchild,Visit);

return OK; // 前序遍历二叉树T的递归算法,对每个数据元素调用函数Visit。 //补全代码,可用多个语句

} // PreOrderTraverse

Status InOrderTraverse( BiTree T, Status(*Visit)(ElemType) ) {

if(T==NULL) return 0;

InOrderTraverse(T->lchild,Visit); Visit(T->data);

InOrderTraverse(T->rchild,Visit);

return 1; // 中序遍历二叉树T的递归算法,对每个数据元素调用函数Visit。 //补全代码,可用多个语句

} // InOrderTraverse

Status PostOrderTraverse( BiTree T, Status(*Visit)(ElemType) ) {

if(T==NULL) return 0;

PostOrderTraverse(T->lchild,Visit); PostOrderTraverse(T->rchild,Visit); Visit(T->data);

return 1; // 后序遍历二叉树T的递归算法,对每个数据元素调用函数Visit。 //补全代码,可用多个语句

} // PostOrderTraverse

int main() //主函数 {

BiTree T; //补充代码 CreateBiTree(T);

//前、中、后序遍历二叉树

PreOrderTraverse(T,PrintElement); printf(\

InOrderTraverse(T,PrintElement); printf(\

PostOrderTraverse(T,PrintElement); printf(\ return 0; }//main

本文来源:https://www.bwwdw.com/article/r5c2.html

Top