求树和二叉树的深度题目及源程序代码

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

树和二叉树

以下问题要求统一在一个大程序里解决。

10、按先序遍历的扩展序列建立二叉树的存储结构

11、二叉树先序、中序、后序遍历的递归算法

12、二叉树中序遍历的非递归算法

13、二叉树层次遍历的非递归算法

14、求二叉树的深度(后序遍历)

15、建立树的存储结构

16、求树的深度

17、

源程序代码:

// tree.cpp : Defines the entry point for the console application. //

#include "stdafx.h"

#include "stdio.h"

#include "stdlib.h"

#define STACK_INIT_SIZE 100

#define STACKINCREMENT 10

#define OK 1

#define ERROR 0

#define TRUE 1

#define FALSE 0

#define OVERFLOW -1

typedef char TElemType; // 元素数据类型

typedef int Status;

/* 二叉链表储存结构*/

typedef struct BiTNode {

TElemType data;

struct BiTNode *lchild, *rchild;

}BiTNode, *BiTree;

bool CreateBiTree(BiTree &T) {

//先序序列建立二叉树

char ch;

scanf("%c",&ch);

if (ch=='*') T = NULL;

else {

if (!(T = (BiTNode *)malloc(sizeof(BiTNode)))) return ERROR; T->data = ch;

CreateBiTree(T->lchild);

CreateBiTree(T->rchild);

}

return OK;

}

Status PrintElement(TElemType e) {

// 访问函数

printf("%c", e);

return OK;

}

Status PreOrderTraverse(BiTree T, Status(*Visit)(TElemType)) { //先序遍历二叉树的递归算法

if (T) {

if (Visit(T->data))

if (PreOrderTraverse(T->lchild, Visit))

if (PreOrderTraverse(T->rchild, Visit)) return OK;

return ERROR;

}else return OK;

}

Status InOrderTraverse(BiTree T, Status(*Visit)(TElemType)) { //中序遍历二叉树的递归算法

if (T) {

if (InOrderTraverse(T->lchild, Visit))

if (Visit(T->data))

if (InOrderTraverse(T->rchild, Visit)) return OK;

return ERROR;

}else return OK;

}

Status PostOrderTraverse(BiTree T, Status(*Visit)(TElemType)) { //后序遍历二叉树的递归算法

if (T) {

if (PostOrderTraverse(T->lchild, Visit))

if (PostOrderTraverse(T->rchild, Visit))

if (Visit(T->data)) return OK;

return ERROR;

}else return OK;

}

/* 栈存储结构及操作

*/

typedef struct {

BiTree *base;

BiTree *top;

int stacksize;

}Stack;

Status InitStack(Stack &S) {

//构造空栈

S.base = (BiTree*)malloc(STACK_INIT_SIZE * sizeof(BiTree)); if (!S.base) exit(OVERFLOW);

S.top = S.base;

S.stacksize = STACK_INIT_SIZE;

return OK;

}

Status GetTop(Stack S, BiTree &e){

//读栈顶元素

if (S.top == S.base) return ERROR;

e = *(S.top - 1);

return OK;

}

Status Push(Stack &S, BiTree e){

//入栈

if (S.top - S.base >= S.stacksize) {

S.base = (BiTree*)realloc(S.base, (S.stacksize + STACKINCREMENT) *

sizeof(BiTree));

if (!S.base) exit(OVERFLOW);

S.top = S.base + S.stacksize;

S.stacksize += STACKINCREMENT;

}

*S.top++ = e;

return OK;

}

Status Pop(Stack &S, BiTree &e){

//出栈

if (S.top == S.base) return ERROR;

e = *--S.top;

return OK;

}

Status StackEmpty(Stack S){

//判栈空

if (S.base == S.top) return TRUE;

相关文档
最新文档