首先要预购和序,以恢复它:
1.首先,我们使用的是递归的方式来完成
2.递归的最小单位:一个空的树和书的前言和第一序。该序列的第一个元素是树的第一序列根,调用这种方法
3.递归的终止条件是。当这棵树的中序序列为空的时候就停止。
同理依据后序和中序序列也是一样的道理:
我们能够发现兴许序列就是先序序列的倒置
#include <stdio.h> #include <stdlib.h> #include <string.h> #define MAXNODE 100 #include <windows.h> static void gotoxy(int x, int y) { COORD c; c.X = x - 1; c.Y = y - 1; SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),c); } typedef struct Node{ char data; struct Node* lchild; struct Node* rchild; }*BinTree,binNodt; //递归前序遍历二叉树 void PreOrder(BinTree T){ if(T == NULL){ return; } printf("%c",T->data); PreOrder(T->lchild); PreOrder(T->rchild); } //递归中序遍历二叉树 void InOrder(BinTree T){ if(T == NULL){ return; } InOrder(T->lchild); printf("%c",T->data); InOrder(T->rchild); } //递归兴许遍历二叉树 void PostOrder(BinTree T){ if(T == NULL){ return; } PostOrder(T->lchild); PostOrder(T->rchild); printf("%c",T->data); } //图像输出 /* 以满二叉树为考虑对象: 为了确保父节点与子节点之间的有交错感觉所以: 二叉树最左边的叶子到根节点的水平距离为:根节点左子数的节点个数.2^(k-2) k是层数 根的层数为1 */ int xxx=0; int yyy=6; void print(BinTree T,int level,int offset){//T,1,0 xxx++; if(T == NULL) return ; else { print(T->lchild,level+1,offset-1); gotoxy(xxx*2,(level*2)+yyy); //printf("%c(%d,%d) ",T->data,offset,level); printf("%c",T->data); if(T->lchild!=NULL){ gotoxy(xxx*2-1,(level*2)+yyy+1); printf("/"); } if(T->rchild!=NULL){ gotoxy(xxx*2+1,(level*2)+yyy+1); printf("\"); } print(T->rchild,level+1,offset+1); } } //查找字符的位置 int getIndex(char * str,char x){ int i; for(i=0;i<strlen(str);i++){ if(str[i]==x){ return i; } } return -1; } //将str字符串切割 void getFastEnd(char* str,char x,char result[2][100]){ strcpy(result[0],"