二叉树的建立,遍历和深度检测

来源:互联网 发布:C语言迭代法求立方根 编辑:程序博客网 时间:2024/05/20 15:58

include

include

define OVERFLOW -1

define OK 1

define NULL 0

typedef char ElemType;
typedef int Status;

typedef struct BiTNode {
ElemType data;
struct BiTNode *lchild, *rchild;
}BiTNode, *BiTree;
Status CreateBiTree(BiTree &T);

void InOrderTraverse(BiTree &T);
void PostOrder(BiTree &T);
void PreOrder(BiTree &T);
Status TreeDepth(BiTree &T);
Status NumberOfNode(BiTree &T);
int main() {
BiTree T;
printf(“please enter some char :”);
CreateBiTree(T);
printf(“\nThe result of inordorTraverse is :”);
InOrderTraverse(T);
printf(“\nThe result of postordorTraverse is :”);
PostOrder(T);
printf(“\nThe result of preordorTraverse is :”);
PreOrder(T);

int depth = TreeDepth(T);printf("\nThe depth of the tree is :%d", depth);int number = NumberOfNode(T);printf("\nThe number of the node is :%d ", number);

}

Status CreateBiTree(BiTree &T) {
char ch;

scanf_s("%c", &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;

}//创建二叉树

void InOrderTraverse(BiTree &T) {

if (T) {    InOrderTraverse(T->lchild);    printf("%c", T->data);    InOrderTraverse(T->rchild);}

}//中序遍历
void PostOrder(BiTree &T) {
if (T) {
InOrderTraverse(T->lchild);
InOrderTraverse(T->rchild);
printf(“%c”, T->data);
}
}//后序遍历
void PreOrder(BiTree &T) {
if (T) {
printf(“%c”, T->data);
InOrderTraverse(T->lchild);
InOrderTraverse(T->rchild);
}
}//先序遍历
Status TreeDepth(BiTree &T) {
int ldepth, rdepth;
if (!T)return 0;
ldepth = TreeDepth(T->lchild);
rdepth = TreeDepth(T->rchild);
if (ldepth >= rdepth)return ldepth + 1;
else return rdepth + 1;
}//树的深度
Status NumberOfNode(BiTree &T) {
int number,number1,number2;
if (!T)return 0;
else return NumberOfNode(T->lchild) + NumberOfNode(T->rchild) + 1;
}//树的节点检测

0 0
原创粉丝点击