笔试题:用二叉树构造双向链表
2015-08-31 16:43
363 查看
#include <iostream> #include <string.h> using namespace std; struct Node { Node *left;//相当于双向链表的prev指针。 Node *right;//相当于双向链表的next指针。 char data; Node(char d = char()):data(d),left(NULL),right(NULL){} }; class MTree { public: MTree():root(NULL){} void Create_Tree(char *VLR,char *LVR) { int n = strlen(LVR); Create_Tree(root,VLR,LVR,n); } void Create_Tree(Node *&t,char *VLR,char *LVR,int n) { //构造二叉树。 if(n==0)return ; int i = 0; while(VLR[0]!=LVR[i])i++; t = new Node(VLR[0]); Create_Tree(t->left,VLR+1,LVR,i); Create_Tree(t->right,VLR+i+1,LVR+i+1,n-i-1); } void Create_DList(MTree &mt) { Node *pr = NULL; Create_DList(root,pr,mt.root); } static void Printf(MTree &mt) {//双向链表打印。 Node *p = mt.root; while(p!=NULL) { cout<<p->data<<" "; p=p->right; } } private: void Create_DList(Node *t,Node *&pr,Node *&mt) { //构造双向链表。 if(t==NULL) { return ; } Create_DList(t->left,pr,mt); if(t!=NULL) { t->left=pr; if(pr) pr->right = t; if(pr==NULL)mt=t; } if(pr!=NULL && pr->right==NULL) { pr->right=t; t->left = pr; } pr = t; Create_DList(t->right,pr,mt); } private: Node *root; }; int main() { char VLR[]="ABCDEFG"; char LVR[]="CBDAFEG"; MTree mt; mt.Create_Tree(VLR,LVR); MTree mtlist; mt.Create_DList(mtlist); MTree :: Printf(mtlist); return 0; }
相关文章推荐
- 笔记1_算法,程序设计,语言等_哈佛_计算机科学cs50_David J. Malan
- LeetCode题解——Count and Say
- hihoCoder 1224 : 赛车
- 使用 Sahi 实现 Web 自动化测试
- hdoj 4062 Queuing 【矩阵快速幂优化递推公式】
- android 轻量级的友好的交互对话框库,EasyDialog,实现已详细标注
- 《Data Structures and Algorithm Analysis in Java》Second Edition中文版笔记
- (Android系列之Fragment(一)----Fragment加载到Activity当中)
- 对Android初学者的10个建议
- Darwin Streaming Server windows系统下安装和配置
- Java- 受检的异常(checked Exception)
- java.sql.SQLException: Access denied for user 'root'
- 设计模式(1)--简单工厂模式、策略模式
- Quartz.Net 作业调度后台管理系统,基于Extjs
- 层序输出二叉树:
- Android5.0 铃声免打扰设置源码浅析
- 【linux】centos7网络配置
- POI 读取 Excel 文件(2003版本与2007版本的差异之处)
- iOS-监测网络状态
- 发送邮件代码