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

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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值