根据前序、中序遍历重构二叉树
来源:互联网 发布:淘宝详情页设计价格 编辑:程序博客网 时间:2024/04/30 16:33
本文来源
【前言】
#include <stdio.h>#include <conio.h>#include <alloc.h>#include <string.h> #define MAXCOUNT 32#define LEFT 0#define RIGHT 1 typedef char Elemtype; typedef struct BtreeNode{ Elemtype Data; struct BtreeNode *LChild,*RChild;}BTREENODE,*BTREENODEPTR,*BTREE; typedef struct Pos{ int x,y;}BTREENODEPOS; BTREENODEPOS BtnPos[MAXCOUNT]; void InitBtreeNodePos(void){ int i; for(i=0;i<16;i++) { BtnPos[16+i].x=25+i*2; BtnPos[16+i].y=16; } for(i=15;i>=1;i--) { BtnPos[i].x=(BtnPos[2*i].x+BtnPos[2*i+1].x)/2; BtnPos[i].y=BtnPos[2*i].y-2; }} void DestroyBtree(BTREE Root){ if(Root==NULL)return; DestroyBtree(Root->LChild); DestroyBtree(Root->RChild); Root->LChild=NULL; Root->RChild=NULL; free(Root);} void ShowBtree(BTREE Root,int Index){ int i,j; if(Root==NULL)return; i=Index*2; j=Index*2+1; gotoxy(BtnPos[Index].x,BtnPos[Index].y); printf("%c",Root->Data); if(i<MAXCOUNT) ShowBtree(Root->LChild,i); if(j<MAXCOUNT) ShowBtree(Root->RChild,j);} int GetLR(char *PreOrder,char *InOrder,int i,int Data){ int j=0,k=0; while(PreOrder[i]!=InOrder[j]) j++; while(Data!=InOrder[k]) k++; if(j<k) return LEFT; else return RIGHT;} void AddBtreeNode(BTREE *Root,char *PreOrder,char *InOrder,int i){ if(*Root==NULL) { (*Root)=(BTREENODE*)malloc(sizeof(BTREENODE)); (*Root)->Data=PreOrder[i]; (*Root)->LChild=NULL; (*Root)->RChild=NULL; } else { if(GetLR(PreOrder,InOrder,i,(*Root)->Data)==LEFT) AddBtreeNode(&(*Root)->LChild,PreOrder,InOrder,i); else AddBtreeNode(&(*Root)->RChild,PreOrder,InOrder,i); }} BTREE CreatBtreeByOrder(void){ char PreOrder[32],InOrder[32]; BTREE Root=NULL; int i; printf("Input PreOrder:"); gets(PreOrder); printf("Input InOrder :"); gets(InOrder); for(i=0;PreOrder[i]!=0;i++) AddBtreeNode(&Root,PreOrder,InOrder,i); return Root;} void main(){ BTREE Root; clrscr(); InitBtreeNodePos(); Root=CreatBtreeByOrder(); ShowBtree(Root,1); DestroyBtree(Root);}
- 根据前序、中序遍历重构二叉树
- 根据二叉树的前序遍历和中序遍历,重构二叉树
- 根据前序遍历和中序遍历重构二叉树
- 根据前序遍历和中序遍历,后序遍历和中序遍历重构二叉树
- 根据前序和中序遍历序列重构二叉树 代码完整版
- 根据中序遍历结果和前序(后序)遍历结果重构二叉树
- 算法面试:根据前序遍历结果序列和中序遍历结果序列重构二叉树
- 重构二叉树(根据前序和中序)
- 根据前序遍历,中序遍历构建二叉树
- 根据前序遍历、中序遍历重建二叉树
- 根据前序遍历中序遍历求二叉树
- 根据二叉树的先序遍历和中序遍历重构二叉树
- 知道二叉树的前序遍历和中序遍历重构二叉树
- 根据前序和中序遍历构造二叉树
- 根据前序和中序遍历构造二叉树
- 根据前序,中序遍历重建二叉树
- 根据中序和前序遍历重建二叉树
- 根据前序、中序遍历创建二叉树
- 关于Android 虚拟机 MySQL的问题、
- Android学习笔记——关于onConfigurationChanged
- Problem of Piracy
- Android 控制台错误 应用程序获取系统权限
- 使用Jquery EasyUi常见问题解决方案
- 根据前序、中序遍历重构二叉树
- getWritableDatabase()和getReadableDatabase()方法区别
- 妙龄女子被合租男子杀害分尸
- 一步步将vim改造成C/C++开发环境(IDE)
- 堆排序算法实现
- 基于AT91SAM9G45的上手之SAM9G45器件DDR2硬件考虑
- 搭建Android源码编译环境
- Map对象的迭代学习
- IplImage, CvMat, Mat 的关系和相互转换