![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
#include<stdio.h> #include<stdlib.h> #include<string.h> int index=1; typedef char String[24]; String str; /*=============用于构造二叉树(存储的数据)===============*/ void StrAssign(String str,char *chars){ int i; for(i=1;i<=strlen(chars);i++) str[i]=*(chars+i-1); } /*==============创建二叉树结构============================*/ typedef struct BiTNode{ char data; struct BiTNode *lchild,*rchild; }BiTNode,*BiTree; /*================按照前序输入二叉树中节点的值==================*/ void CreateBiTree(BiTree *T){ char ch; ch=str[index++]; if(ch=='#') *T=NULL; else{ *T=(BiTree)malloc(sizeof(BiTNode)); (*T)->data=ch; CreateBiTree(&(*T)->lchild); CreateBiTree(&(*T)->rchild); } } /*=============返回T的深度===========*/ int BiTreeDepth(BiTree T){ int i,j; if(!T) return 0; if(T->lchild) i=BiTreeDepth(T->lchild); else i=0; if(T->rchild) j=BiTreeDepth(T->rchild); else j=0; return i>j?i+1:j+1; } /*==============先序遍历二叉树========*/ void PreOederTraverse(BiTree T){ if(T==NULL) return; printf("%c",T->data); PreOederTraverse(T->lchild); PreOederTraverse(T->rchild); } /*=============中序遍历二叉树==============*/ void InOrderTraverse(BiTree T){ if(T==NULL) return; InOrderTraverse(T->lchild); printf("%c",T->data); InOrderTraverse(T->rchild); } /*=============后序遍历二叉树==============*/ void PostOrderTraverse(BiTree T){ if(T==NULL) return; PostOrderTraverse(T->lchild); PostOrderTraverse(T->rchild); printf("%c",T->data); } int main(){ BiTree T; StrAssign(str,"ABDH#K###E##CFI###G#J##"); CreateBiTree(&T); printf("先序遍历\n"); PreOederTraverse(T); printf("\n中序遍历\n"); InOrderTraverse(T); printf("\n后序遍历\n"); PostOrderTraverse(T); printf("\n二叉树深度%d\n",BiTreeDepth(T)); return 0; }