先序建立 中序建立 后序建立
先序遍历 中序遍历 后序遍历
求树的深度
#include<stdio.h> #include<math.h> #include<stdlib.h> typedef struct node{ char ch; struct node *Lchild; struct node *Rchild; }BiTNode,*BiTree; void Q_CreatTree(BiTree *T); void Z_CreatTree(BiTree *T); void H_CreatTree(BiTree *T); void Q_Traverse(BiTree T); void Z_Traverse(BiTree T); void H_Traverse(BiTree T); int TreeDeep(BiTree T); int main(void) { BiTree T; Q_CreatTree(&T); //Z_CreatTree(&T); //H_CreatTree(&T); Q_Traverse(T); printf("\n"); Z_Traverse(T); printf("\n"); H_Traverse(T); printf("\n"); printf("树的深度:%d\n",TreeDeep(T)); } void Q_CreatTree(BiTree *T)//前序遍历建立二叉树 { char a; a=getchar(); if(a=='^') { *T=NULL; } else { *T=(BiTree)malloc(sizeof(BiTNode)); (*T)->ch=a; Q_CreatTree( &( (*T)->Lchild ) ); Q_CreatTree( &( (*T)->Rchild ) ); } } void Z_CreatTree(BiTree *T)//中序遍历建立二叉树 { char a; a=getchar(); if(a=='#') { *T=NULL; } else { *T=(BiTree)malloc(sizeof(BiTNode)); Z_CreatTree( &( (*T)->Lchild ) ); (*T)->ch=a; Z_CreatTree( &( (*T)->Rchild ) ); } } void H_CreatTree(BiTree *T)//后序遍历建立二叉树 { char a; a=getchar(); if(a=='#') { *T=NULL; } else { *T=(BiTree)malloc(sizeof(BiTNode)); H_CreatTree( &( (*T)->Lchild ) ); H_CreatTree( &( (*T)->Rchild ) ); (*T)->ch=a; } } void Q_Traverse(BiTree T)//前序遍历二叉树 { if(T) { printf("%c",T->ch); Q_Traverse(T->Lchild); Q_Traverse(T->Rchild); } } void Z_Traverse(BiTree T)//中序遍历二叉树 { if(T) { Z_Traverse(T->Lchild); printf("%c",T->ch); Z_Traverse(T->Rchild); } } void H_Traverse(BiTree T)//后序遍历二叉树 { if(T) { H_Traverse(T->Lchild); H_Traverse(T->Rchild); printf("%c",T->ch); } } int TreeDeep(BiTree T)//求树的深度 { int n=0; if(T) { int L=TreeDeep(T->Lchild); int R=TreeDeep(T->Rchild); n=L+1>R+1?L+1:R+1; } return n; }