#include<stdio.h>
#include<stdlib.h>
#define OK 1
#define ERROR 0
#define MAXSIZE 50
#define OVERFLOW -1
typedef int Status;
typedef char TElemType;
char m;
typedef struct BiTNode
{
TElemType data;
struct BiTNode *lchild, *rchild;
} BiTNode, *BiTree;
Status InitBiTree(BiTree &T) //构造空二叉树T
{
T=NULL;
return OK;
}
void DestroyBiTree(BiTree &T) //后序销毁二叉树T
{
if(T)
{
if(T->lchild) DestroyBiTree(T->lchild);
if(T->rchild) DestroyBiTree(T->rchild);
free(T);
T=NULL;
}
}
void CreateBiTree(BiTree &T) //先序创建二叉树
{
TElemType ch;
scanf("%c",&ch);
if(ch==' ') T=NULL;
else
{
T=(BiTNode *)malloc(sizeof(BiTNode));
if(!T) exit(OVERFLOW);
T->data=ch;
CreateBiTree(T->lchild);
CreateBiTree(T->rchild);
}
}
void PreOrderTraverse(BiTree T) // 先序遍历递归
{
if(T)
{
printf("%c ",T->data);
PreOrderTraverse(T->lchild);
PreOrderTraverse(T->rchild);
}
}
void InOrderTraverse(BiTree T) // 中序遍历递归
{
if(T)
{
InOrderTraverse(T->lchild);
printf("%c ",T->data);
InOrderTraverse(T->rchild);
}
}
void PostOrderTraverse(BiTree T) // 后序遍历递归
{
if(T)
{
PostOrderTraverse(T->lchild);
PostOrderTraverse(T->rchild);
printf("%c ",T->data);
}
}
// 中序遍历非递归遍历算法
void InOrderTraversal_NoRecursion( BiTNode *T )
{
BiTNode *Stack[MAXSIZE];
int top=-1;
while(T || (top!=-1)) // T为空指针或者栈为空时终止。栈中不压入空指针。
{
while(T) // 一直向左并将沿途结点压入堆栈
{
Stack[++top] = T;
T=T->lchild;
}
if(top!=-1)
{
T=Stack[top--]; // 结点弹出堆栈
printf("%c ",T->data); //(访问)打印结点
T=T->rchild; // 转向右子树
}
}
}
void find(BiTree T)
{
if(T)
{
if(T->data==m)
{
if(T->lchild==NULL && T->rchild==NULL) printf("没有左右孩子\n");
else if(T->lchild==NULL && T->rchild!=NULL) printf("没有左孩子 右孩子 %c \n",T->rchild->data);
else if(T->lchild!=NULL && T->rchild==NULL) printf("左孩子%c 没有右孩子\n",T->lchild->data);
else
{
printf("左孩子 %c ",T->lchild->data);
printf("右孩子 %c \n",T->rchild->data);
}
}
find(T->lchild);
find(T->rchild);
}
}
void PreOrdershow(BiTree T) // 先序遍历广义表输出
{
if(T)
{
if(T->lchild==NULL && T->rchild==NULL)
{
printf("%c",T->data);
return;
}
if(T->lchild!=NULL || T->rchild!=NULL)
{
printf("%c(",T->data);
}
if(T->lchild==NULL && T->rchild==NULL)
{
printf("%c",T->data);
}
PreOrdershow(T->lchild);
if(T->rchild!=NULL)
{
printf(",");
}
PreOrdershow(T->rchild);
if(T->lchild!=NULL || T->rchild!=NULL)
{
printf(")");
}
}
}
void PreOrdershow1(BiTree T) //先序遍历广义表输出 高端写法 又上一个总结到这个
{
if(T)
{
printf("%c",T->data);
if(T->lchild!=NULL || T->rchild!=NULL)
{
printf("(");
DispBTree(T->lchild);
if(T->rchild!=NULL) printf(",");
DispBTree(T->rchild);
printf(")");
}
}
}
int max(int a, int b)
{
return a>=b ? a : b;
}
int BTree_Height(BiTree T) //高度
{
if(T==NULL)
return 0;
else
if(T->lchild==NULL && T->rchild==NULL)
return 1;
else
return 1+max(BTree_Height(T->lchild),BTree_Height(T->rchild));
}
void PreOrderPrintLeaves(BiTree T) // 输出叶子结点值
{
if(T)
{
if(T->lchild==NULL && T->rchild==NULL)
printf("%c ",T->data );
PreOrderPrintLeaves (T->lchild);
PreOrderPrintLeaves (T->rchild);
}
}
int main()
{
BiTree root;
printf("创建二叉树\n");
InitBiTree(root);
CreateBiTree(root);
printf("\n");
printf("输出二叉树\n");//"ABD EHJ KL M N CF G I "
PreOrdershow(root);printf("\n");
PreOrdershow1(root);
printf("\n\n");
printf("查找H节点\n");
m='H';
find(root);
printf("\n\n");
printf("二叉树高度\n");
printf("%d",BTree_Height(root));
printf("\n\n");
printf("释放二叉树\n");
DestroyBiTree(root);
}
#include<stdio.h>
#include<stdlib.h>
#define OK 1
#define ERROR 0
#define MAXSIZE 50
#define OVERFLOW -1
typedef int Status;
typedef char TElemType;
char m;
typedef struct BiTNode
{
TElemType data;
struct BiTNode *lchild, *rchild;
} BiTNode, *BiTree;
Status InitBiTree(BiTree &T) //构造空二叉树T
{
T=NULL;
return OK;
}
void DestroyBiTree(BiTree &T) //后序销毁二叉树T
{
if(T)
{
if(T->lchild) DestroyBiTree(T->lchild);
if(T->rchild) DestroyBiTree(T->rchild);
free(T);
T=NULL;
}
}
void CreateBiTree(BiTree &T) //先序创建二叉树
{
TElemType ch;
scanf("%c",&ch);
if(ch==' ') T=NULL;
else
{
T=(BiTNode *)malloc(sizeof(BiTNode));
if(!T) exit(OVERFLOW);
T->data=ch;
CreateBiTree(T->lchild);
CreateBiTree(T->rchild);
}
}
void PreOrderTraverse(BiTree T) // 先序遍历递归
{
if(T)
{
printf("%c ",T->data);
PreOrderTraverse(T->lchild);
PreOrderTraverse(T->rchild);
}
}
void InOrderTraverse(BiTree T) // 中序遍历递归
{
if(T)
{
InOrderTraverse(T->lchild);
printf("%c ",T->data);
InOrderTraverse(T->rchild);
}
}
void PostOrderTraverse(BiTree T) // 后序遍历递归
{
if(T)
{
PostOrderTraverse(T->lchild);
PostOrderTraverse(T->rchild);
printf("%c ",T->data);
}
}
void PreOrderTraverse_NoRecursion(BiTNode *T) // 先序遍历非递归遍历算法
{
BiTNode *Stack[MAXSIZE];
int top=-1;
while(T || (top!=-1))
{
while(T)
{
Stack[++top]=T;
printf("%c ",T->data);
T=T->lchild;
}
if(top!=-1)
{
T=Stack[top--];
T=T->rchild;
}
}
}
void InOrderTraversal_NoRecursion(BiTNode *T) // 中序遍历非递归遍历算法
{
BiTNode *Stack[MAXSIZE];
int top=-1;
while(T || (top!=-1)) // T为空指针或者栈为空时终止。栈中不压入空指针。
{
while(T) // 一直向左并将沿途结点压入堆栈
{
Stack[++top]=T;
T=T->lchild;
}
if(top!=-1)
{
T=Stack[top--]; // 结点弹出堆栈
printf("%c ",T->data); //(访问)打印结点
T=T->rchild; // 转向右子树
}
}
}
void PostOrderTraversal_NoRecursion(BiTNode *T) // 后序遍历非递归遍历算法
{
BiTNode *Stack[MAXSIZE];
int Stack1[MAXSIZE];
int top=-1;int tag;
while(T || (top!=-1))
{
while(T)
{
Stack[++top]=T;
tag=0;
Stack1[top]=tag;
T=T->lchild;
}
if(Stack1[top]==0)
{
tag=1;
Stack1[top]=tag;
T=Stack[top]->rchild;
}
else
{
T=Stack[top];
top--;
printf("%c ",T->data);
T=NULL;
}
}
}
void LevelorderTraverse(BiTNode *T)
{
BiTNode *Queue[MAXSIZE];
int front=0,rear=0;
if(T)
{
Queue[++rear]=T; /* 根结点入队 */
while(front<rear)
{
T=Queue[++front];
printf("%c ",T->data);
if(T->lchild!=NULL)
Queue[++rear]=T->lchild; /* 左结点入队 */
if(T->rchild!=NULL)
Queue[++rear]=T->rchild; /* 右结点入队 */
}
}
}
void find(BiTree T)
{
if(T)
{
if(T->data==m)
{
if(T->lchild==NULL && T->rchild==NULL) printf("没有左右孩子\n");
else if(T->lchild==NULL && T->rchild!=NULL) printf("没有左孩子 右孩子 %c \n",T->rchild->data);
else if(T->lchild!=NULL && T->rchild==NULL) printf("左孩子%c 没有右孩子\n",T->lchild->data);
else
{
printf("左孩子 %c ",T->lchild->data);
printf("右孩子 %c \n",T->rchild->data);
}
}
find(T->lchild);
find(T->rchild);
}
}
void PreOrdershow(BiTree T) // 先序遍历广义表输出
{
if(T)
{
if(T->lchild==NULL && T->rchild==NULL)
{
printf("%c",T->data);
return;
}
if(T->lchild!=NULL || T->rchild!=NULL)
{
printf("%c(",T->data);
}
if(T->lchild==NULL && T->rchild==NULL)
{
printf("%c",T->data);
}
PreOrdershow(T->lchild);
if(T->rchild!=NULL)
{
printf(",");
}
PreOrdershow(T->rchild);
if(T->lchild!=NULL || T->rchild!=NULL)
{
printf(")");
}
}
}
int max(int a, int b)
{
return a>=b ? a : b;
}
int BTree_Height(BiTree T) //高度
{
if(T==NULL)
return 0;
else
if(T->lchild==NULL && T->rchild==NULL)
return 1;
else
return 1+max(BTree_Height(T->lchild),BTree_Height(T->rchild));
}
void PreOrderPrintLeaves(BiTree T) // 输出叶子结点值
{
if(T)
{
if(T->lchild==NULL && T->rchild==NULL)
printf("%c ",T->data );
PreOrderPrintLeaves (T->lchild);
PreOrderPrintLeaves (T->rchild);
}
}
int main()
{
BiTree root;
printf("创建二叉树\n");
InitBiTree(root);
CreateBiTree(root);
printf("输出二叉树\n");//"ABD EHJ KL M N CF G I "
PreOrdershow(root);
printf("\n");
printf("层次遍历二叉树-递归\n");
LevelorderTraverse(root);
printf("\n");
printf("先序遍历二叉树-递归\n");
PreOrderTraverse(root);
printf("\n");
printf("先序遍历二叉树-非递归\n");
PreOrderTraverse_NoRecursion(root);
printf("\n");
printf("中序遍历二叉树-递归\n");
InOrderTraverse(root);
printf("\n");
printf("中序遍历二叉树-非递归\n");
InOrderTraversal_NoRecursion(root);
printf("\n");
printf("后序遍历二叉树-递归\n");
PostOrderTraverse(root);
printf("\n");
printf("后序遍历二叉树-非递归\n");
PostOrderTraversal_NoRecursion(root);
printf("\n");
printf("释放二叉树\n");
DestroyBiTree(root);
printf("\n");
}
#include<stdio.h>
#include<stdlib.h>
#define OK 1
#define ERROR 0
#define MAXSIZE 50
#define OVERFLOW -1
typedef int Status;
typedef char TElemType;
int level;
char m;
typedef struct BiTNode
{
TElemType data;
struct BiTNode *lchild, *rchild;
} BiTNode, *BiTree;
Status InitBiTree(BiTree &T) //构造空二叉树T
{
T=NULL;
return OK;
}
void DestroyBiTree(BiTree &T) //后序销毁二叉树T
{
if(T)
{
if(T->lchild) DestroyBiTree(T->lchild);
if(T->rchild) DestroyBiTree(T->rchild);
free(T);
T=NULL;
}
}
void CreateBiTree(BiTree &T) //先序创建二叉树
{
TElemType ch;
scanf("%c",&ch);
if(ch==' ') T=NULL;
else
{
T=(BiTNode *)malloc(sizeof(BiTNode));
if(!T) exit(OVERFLOW);
T->data=ch;
CreateBiTree(T->lchild);
CreateBiTree(T->rchild);
}
}
void PreOrderTraverse(BiTree T) // 先序遍历递归
{
if(T)
{
printf("%c ",T->data);
PreOrderTraverse(T->lchild);
PreOrderTraverse(T->rchild);
}
}
void InOrderTraverse(BiTree T) // 中序遍历递归
{
if(T)
{
InOrderTraverse(T->lchild);
printf("%c ",T->data);
InOrderTraverse(T->rchild);
}
}
void PostOrderTraverse(BiTree T) // 后序遍历递归
{
if(T)
{
PostOrderTraverse(T->lchild);
PostOrderTraverse(T->rchild);
printf("%c ",T->data);
}
}
void PreOrderTraverse_NoRecursion(BiTNode *T) // 先序遍历非递归遍历算法
{
BiTNode *Stack[MAXSIZE];
int top=-1;
while(T || (top!=-1))
{
while(T)
{
Stack[++top]=T;
printf("%c ",T->data);
T=T->lchild;
}
if(top!=-1)
{
T=Stack[top--];
T=T->rchild;
}
}
}
void InOrderTraversal_NoRecursion(BiTNode *T) // 中序遍历非递归遍历算法
{
BiTNode *Stack[MAXSIZE];
int top=-1;
while(T || (top!=-1)) // T为空指针或者栈为空时终止。栈中不压入空指针。
{
while(T) // 一直向左并将沿途结点压入堆栈
{
Stack[++top]=T;
T=T->lchild;
}
if(top!=-1)
{
T=Stack[top--]; // 结点弹出堆栈
printf("%c ",T->data); //(访问)打印结点
T=T->rchild; // 转向右子树
}
}
}
void PostOrderTraversal_NoRecursion(BiTNode *T) // 后序遍历非递归遍历算法
{
BiTNode *Stack[MAXSIZE];
int Stack1[MAXSIZE];
int top=-1;int tag;
while(T || (top!=-1))
{
while(T)
{
Stack[++top]=T;
tag=0;
Stack1[top]=tag;
T=T->lchild;
}
if(Stack1[top]==0)
{
tag=1;
Stack1[top]=tag;
T=Stack[top]->rchild;
}
else
{
T=Stack[top];
top--;
printf("%c ",T->data);
T=NULL;
}
}
}
void LevelorderTraverse(BiTNode *T)
{
BiTNode *Queue[MAXSIZE];
int front=0,rear=0;
if(T)
{
Queue[++rear]=T; /* 根结点入队 */
while(front<rear)
{
T=Queue[++front];
printf("%c ",T->data);
if(T->lchild!=NULL)
Queue[++rear]=T->lchild; /* 左结点入队 */
if(T->rchild!=NULL)
Queue[++rear]=T->rchild; /* 右结点入队 */
}
}
}
void find_address(BiTree &T) //"ABD EHJ KL M N CF G I "
{
if(T)
{
if(T->data==m)
{
if(T->lchild==NULL && T->rchild==NULL) printf("没有左右孩子");
else if(T->lchild==NULL && T->rchild!=NULL) printf("没有左孩子 右孩子 %c ",T->rchild->data);
else if(T->lchild!=NULL && T->rchild==NULL) printf("左孩子%c 没有右孩子",T->lchild->data);
else
{
printf("左孩子 %c ",T->lchild->data);
printf("右孩子 %c ",T->rchild->data);
}
printf(" 查找节点所在层次%d \n",level);
}
level++;
find_address(T->lchild);
find_address(T->rchild);
level--;
}
}
void PreOrdershow(BiTree T) // 先序遍历广义表输出
{
if(T)
{
if(T->lchild==NULL && T->rchild==NULL)
{
printf("%c",T->data);
return;
}
if(T->lchild!=NULL || T->rchild!=NULL)
{
printf("%c(",T->data);
}
if(T->lchild==NULL && T->rchild==NULL)
{
printf("%c",T->data);
}
PreOrdershow(T->lchild);
if(T->rchild!=NULL)
{
printf(",");
}
PreOrdershow(T->rchild);
if(T->lchild!=NULL || T->rchild!=NULL)
{
printf(")");
}
}
}
int max(int a, int b)
{
return a>=b ? a:b;
}
int BTree_Height(BiTree T) //高度
{
if(T==NULL)
return 0;
else
if(T->lchild==NULL && T->rchild==NULL)
return 1;
else
return 1+max(BTree_Height(T->lchild),BTree_Height(T->rchild));
}
void PreOrderPrintLeaves(BiTree T) // 输出叶子结点值
{
if(T)
{
if(T->lchild==NULL && T->rchild==NULL)
printf("%c ",T->data );
PreOrderPrintLeaves (T->lchild);
PreOrderPrintLeaves (T->rchild);
}
}
int main()
{
BiTree root;
printf("创建二叉树\n");
InitBiTree(root);
CreateBiTree(root);
printf("\n");
printf("输出二叉树\n");//"ABD EHJ KL M N CF G I "
PreOrdershow(root);
printf("\n\n");
printf("查找定位\n");
m='G';
find_address(root);
printf("\n\n");
printf("释放二叉树\n");
DestroyBiTree(root);
printf("\n");
}
#include<stdio.h>
#include<stdlib.h>
#define OK 1
#define ERROR 0
#define MAXSIZE 50
#define OVERFLOW -1
typedef int Status;
typedef char TElemType;
char m;
typedef struct BiTNode
{
TElemType data;
struct BiTNode *lchild, *rchild;
} BiTNode, *BiTree;
Status InitBiTree(BiTree &T) //构造空二叉树T
{
T=NULL;
return OK;
}
void DestroyBiTree(BiTree &T) //后序销毁二叉树T
{
if(T)
{
if(T->lchild) DestroyBiTree(T->lchild);
if(T->rchild) DestroyBiTree(T->rchild);
free(T);
T=NULL;
}
}
void CreateBiTree(BiTree &T) //先序创建二叉树
{
TElemType ch;
scanf("%c",&ch);
if(ch==' ') T=NULL;
else
{
T=(BiTNode *)malloc(sizeof(BiTNode));
if(!T) exit(OVERFLOW);
T->data=ch;
CreateBiTree(T->lchild);
CreateBiTree(T->rchild);
}
}
void PreOrderTraverse(BiTree T) // 先序遍历递归
{
if(T)
{
printf("%c ",T->data);
PreOrderTraverse(T->lchild);
PreOrderTraverse(T->rchild);
}
}
void InOrderTraverse(BiTree T) // 中序遍历递归
{
if(T)
{
InOrderTraverse(T->lchild);
printf("%c ",T->data);
InOrderTraverse(T->rchild);
}
}
void PostOrderTraverse(BiTree T) // 后序遍历递归
{
if(T)
{
PostOrderTraverse(T->lchild);
PostOrderTraverse(T->rchild);
printf("%c ",T->data);
}
}
// 中序遍历非递归遍历算法
void InOrderTraversal_NoRecursion( BiTNode *T )
{
BiTNode *Stack[MAXSIZE];
int top=-1;
while(T || (top!=-1)) // T为空指针或者栈为空时终止。栈中不压入空指针。
{
while(T) // 一直向左并将沿途结点压入堆栈
{
Stack[++top] = T;
T=T->lchild;
}
if(top!=-1)
{
T=Stack[top--]; // 结点弹出堆栈
printf("%c ",T->data); //(访问)打印结点
T=T->rchild; // 转向右子树
}
}
}
void find(BiTree T)
{
if(T)
{
if(T->data==m)
{
if(T->lchild==NULL && T->rchild==NULL) printf("没有左右孩子\n");
else if(T->lchild==NULL && T->rchild!=NULL) printf("没有左孩子 右孩子 %c \n",T->rchild->data);
else if(T->lchild!=NULL && T->rchild==NULL) printf("左孩子%c 没有右孩子\n",T->lchild->data);
else
{
printf("左孩子 %c ",T->lchild->data);
printf("右孩子 %c \n",T->rchild->data);
}
}
find(T->lchild);
find(T->rchild);
}
}
void PreOrdershow(BiTree T) // 先序遍历广义表输出
{
if(T)
{
if(T->lchild==NULL && T->rchild==NULL)
{
printf("%c",T->data);
return;
}
if(T->lchild!=NULL || T->rchild!=NULL)
{
printf("%c(",T->data);
}
if(T->lchild==NULL && T->rchild==NULL)
{
printf("%c",T->data);
}
PreOrdershow(T->lchild);
if(T->rchild!=NULL)
{
printf(",");
}
PreOrdershow(T->rchild);
if(T->lchild!=NULL || T->rchild!=NULL)
{
printf(")");
}
}
}
int max(int a, int b)
{
return a>=b ? a : b;
}
int BTree_Height(BiTree T) //高度
{
if(T==NULL)
return 0;
else
if(T->lchild==NULL && T->rchild==NULL)
return 1;
else
return 1+max(BTree_Height(T->lchild),BTree_Height(T->rchild));
}
int PrintAncestors(BiTree root, char x) //查找x并输逆序出x的祖先
{
if (!root) return 0;
if (root->data==x)
{
printf("%c ",root->data);
return 1;
}
//如果子树中可以找到匹配值 那么此节点肯定是祖先结点
if (PrintAncestors(root->lchild, x) || PrintAncestors(root->rchild, x))
{
printf("%c ", root->data);
return 1;
}
return 0;
}//打印祖先
void LeavestoGra(BiTree T,TElemType path[],int len) //所有叶子节点到根节点的逆序列 (先序遍历
{
if(T!=NULL)
{
if(T->lchild==NULL && T->rchild==NULL) //输出栈中所有结点
{
printf("%c->",T->data);
for(int i=len-1;i>0;i--)
printf("%c->",path[i]);
printf("%c\n",path[0]);
}
else
{ path[len++]=T->data;
LeavestoGra(T->lchild,path,len);
LeavestoGra(T->rchild,path,len);
}
}
}
void MaxPath(BiTree T,TElemType path[],int len,TElemType maxpath[],int &maxlen)
{
if(T!=NULL)
{
if(T->lchild==NULL && T->rchild==NULL) //输出栈中所有结点值
{
if(len>maxlen) //通过比较求最长路径
{
maxpath[len]=T->data;
for(int i=len-1;i>=0;i--)
maxpath[i]=path[i];
maxlen=len+1;
}
}
else
{
path[len++]=T->data; //将当前节点放入路径中 //路径长度增1
MaxPath(T->lchild,path,len,maxpath,maxlen);
MaxPath(T->rchild,path,len,maxpath,maxlen);
}
}
}
void zhenghe(BiTree T,TElemType path[],int len,TElemType maxpath[],int &maxlen) //全部输出与最长路径整合
{
if(T!=NULL)
{
if(T->lchild==NULL && T->rchild==NULL) //输出栈中所有结点值
{
printf("%c->",T->data);
for(int i=len-1;i>0;i--)
printf("%c->",path[i]);
printf("%c\n",path[0]);
if(len>maxlen) //通过比较求最长路径
{
maxpath[len]=T->data;
for(int i=len-1;i>=0;i--)
maxpath[i]=path[i];
maxlen=len+1;
}
}
else
{
path[len++]=T->data; //将当前节点放入路径中 //路径长度增1
zhenghe(T->lchild,path,len,maxpath,maxlen);
zhenghe(T->rchild,path,len,maxpath,maxlen);
}
}
}
void PreOrderPrintLeaves(BiTree T) // 输出叶子结点值
{
if(T)
{
if(T->lchild==NULL && T->rchild==NULL)
printf("%c ",T->data );
PreOrderPrintLeaves (T->lchild);
PreOrderPrintLeaves (T->rchild);
}
}
int main()
{
BiTree root;
printf("创建二叉树\n");
InitBiTree(root);
CreateBiTree(root);
printf("\n");
printf("输出二叉树\n");//"ABD EHJ KL M N CF G I "
PreOrdershow(root);
printf("\n\n");
/*
printf("叶子结点逆序\n");
TElemType path[MAXSIZE];
LeavestoGra(root,path,0);
printf("\n");
printf("第一条最长逆路径长度:");
TElemType maxpath[MAXSIZE];int maxlen=0;
MaxPath(root,path,0,maxpath,maxlen);
printf("%d\n",maxlen);
printf("第一条最长逆路径:");
for(int j=maxlen;j>=0;j--)
printf("%c ",maxpath[j]);
printf("\n\n");
*/
//全部输出与最长路径整合
printf("叶子结点逆序\n");
TElemType path[MAXSIZE];TElemType maxpath[MAXSIZE];int maxlen=0;
zhenghe(root,path,0,maxpath,maxlen);
printf("\n");
printf("第一条最长逆路径长度:");
printf("%d\n",maxlen);
printf("第一条最长逆路径:");
for(int j=maxlen;j>=0;j--)
printf("%c ",maxpath[j]);
printf("\n\n");
printf("释放二叉树\n");
DestroyBiTree(root);
}