二叉树创建、遍历、求深度--C语言实现

来源:互联网 发布:mac系统pages怎么保存 编辑:程序博客网 时间:2024/05/17 23:36
#include <stdio.h>#include <stdlib.h>#include <malloc.h>typedef int ElemType; //数据类型typedef int Status; //返回值类型//定义二叉树结构typedef struct BiTNode{ElemType data; //数据域struct BiTNode*lChild, *rChlid; //左右子树域}BiTNode, *BiTree;//先序创建二叉树Status CreateBiTree(BiTree *T){ElemType ch;ElemType temp;scanf("%d", &ch);temp = getchar();if (-1 == ch)*T = NULL;else{*T = (BiTree)malloc(sizeof(BiTNode));if (!(*T))exit(-1);(*T)->data = ch;printf("输入%d的左子节点:", ch);CreateBiTree(&(*T)->lChild);printf("输入%d的右子节点:", ch);CreateBiTree(&(*T)->rChlid);}return 1;}//先序遍历二叉树void TraverseBiTree(BiTree T){if (NULL == T)return ;printf("%d ", T->data);TraverseBiTree(T->lChild);TraverseBiTree(T->rChlid);}//中序遍历二叉树void InOrderBiTree(BiTree T){if (NULL == T)return ;InOrderBiTree(T->lChild);printf("%d ", T->data);InOrderBiTree(T->rChlid);}//后序遍历二叉树void PostOrderBiTree(BiTree T){if (NULL == T)return ;PostOrderBiTree(T->lChild);PostOrderBiTree(T->rChlid);printf("%d ", T->data);}//二叉树的深度int TreeDeep(BiTree T){int deep = 0;if(T){int leftdeep = TreeDeep(T->lChild);int rightdeep = TreeDeep(T->rChlid);deep = leftdeep>=rightdeep?leftdeep+1:rightdeep+1;}return deep;}//主函数int main(void){BiTree T;BiTree *p = (BiTree*)malloc(sizeof(BiTree));int deepth;printf("请输入第一个结点的值,-1表示没有叶结点:\n");CreateBiTree(&T);printf("先序遍历二叉树:\n");TraverseBiTree(T);printf("\n");printf("中序遍历二叉树:\n");InOrderBiTree(T);printf("\n");printf("后序遍历二叉树:\n");PostOrderBiTree(T);printf("\n");deepth=TreeDeep(T);printf("树的深度为:%d",deepth);printf("\n");return 0;}

0 1
原创粉丝点击