http://ac.jobdu.com/problem.php?pid=1078 二叉树遍历

#include<stdio.h>
#include<string.h>//二叉树结点的描述
typedef struct BinaryTreeNode
{char data;struct BinaryTreeNode *lchild, *rchild;      //左右孩子
}BinaryTreeNode,*BinaryTree;inline BinaryTreeNode* ConstructCore(char *startPreorder, char *endPreorder, char *startInorder, char *endInorder)
{//前序遍历序列的第一个字符是根节点的值char rootValue = startPreorder[0];BinaryTreeNode* root = new BinaryTreeNode();root->data = rootValue;root->lchild = root->rchild = NULL;if(startPreorder == endPreorder){if(startInorder == endInorder && *startPreorder== *startInorder)return root;}//在中序遍历中找到根节点的值char *rootInorder = startInorder;while(rootInorder <= endInorder && *rootInorder != rootValue)rootInorder++;int leftLength = rootInorder - startInorder;char *leftPreorderEnd = startPreorder + leftLength;if(leftLength > 0){//构建左子树root->lchild = ConstructCore(startPreorder+1, leftPreorderEnd, startInorder, rootInorder-1);}if(leftLength < endPreorder - startPreorder){//构建右子树root->rchild = ConstructCore(leftPreorderEnd+1, endPreorder, rootInorder+1, endInorder);}return root;
}//分别在前序遍历和中序遍历的序列中确定左、右子树的子序列
inline BinaryTreeNode* Construct(char *preorder, char *inorder, int length)
{if(preorder == NULL || inorder == NULL || length<=0)return NULL;return ConstructCore(preorder, preorder+length-1, inorder, inorder+length-1);
}//后序遍历
inline void PostOrder(BinaryTreeNode *root)
{if(root==NULL)return ;PostOrder(root->lchild);        //递归调用,前序遍历左子树PostOrder(root->rchild);        //递归调用,前序遍历右子树printf("%c", root->data);      //输出数据
}//释放二叉树
inline void DeleteBinaryTree(BinaryTree root)
{if(root){DeleteBinaryTree(root->lchild);    //释放左子树DeleteBinaryTree(root->rchild);    //释放右子树delete root;          //释放根结点}
}int main(void)
{int length;char preorder[27],inorder[27];while(scanf("%s",preorder)!=EOF){scanf("%s",inorder);length = strlen(preorder);BinaryTreeNode* root = Construct(preorder, inorder, length);PostOrder(root);printf("\n");DeleteBinaryTree(root);}return 0;
}

2006年清华大学计算机研究生机试真题相关推荐

  1. [高精度整数] N的阶乘 [2006年清华大学计算机研究生机试真题]

    题目描述: 输入一个正整数N,输出N的阶乘. 输入描述: 正整数N(0<=N<=1000) 输出描述: 输入可能包括多组数据,对于每一组输入数据,输出N的阶乘 样例输入: 4 5 15 样 ...

  2. 2010年清华大学计算机研究生机试真题

    http://ac.jobdu.com/problem.php?pid=1085  求root(N, k) /* N =a0+a1*k+a2*k^2+......ar*k^r; N'=a0+a1 +a ...

  3. 2008年清华大学计算机研究生机试真题

    http://ac.jobdu.com/problem.php?pid=1080  进制转换 当然这个题目如果使用大数模板来做的话,也是可以AC的,话说我第一次就是用大数模板AC的,然后又改用了下面这 ...

  4. [素数拓展] 质因数的个数 [2007年清华大学计算机研究生机试真题]

    题目描述: 求正整数N(N>1)的质因数的个数. 相同的质因数需要重复计算.如120=22235,共有5个质因数. 输入描述: 可能有多组测试数据,每组测试数据的输入是一个正整数N,(1< ...

  5. 特殊乘法 [清华大学计算机研究生机试真题]

    题目描述: 写个算法,对2个小于1000000000的输入,求结果. 特殊乘法举例:123 * 45 = 14 +15 +24 +25 +34+35 输入描述: 两个小于1000000000的数 输出 ...

  6. 2000年华中科技大学计算机研究生机试真题 对称矩阵

    题目1180:对称矩阵 时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:2518 解决:1295 题目描述: 输入一个N维矩阵,判断是否对称. 输入: 输入第一行包括一个数:N(1<= ...

  7. 211大学计算机复试不机试,复试机试之上海交通大学计算机研究生机试真题.doc...

    复试机试之上海交通大学计算机研究生机试真题 (你自己回去改格式啊,这个有多重繁杂字体,你自己改好看点~~还有知识05年到11年的)复试机试之2011年上海交通大学计算机研究生机试真题 (2012-02 ...

  8. 上海交大研究生计算机考研真题,2011年上海交通大学计算机研究生机试真题

    Oracle 约束(constraint)的几个参数的小研究 ORACLE中,约束分deferred 跟 immediate 2种: deferred:如果 Oracle 在事务提交(commit)时 ...

  9. 2006年上海交通大学计算机研究生机试真题

    http://ac.jobdu.com/problem.php?pid=1095 2的幂次方 //手动模拟 #include<iostream> #include<string> ...

最新文章

  1. 【vue】vue +element 搭建项目,Qs用途
  2. Unity3d(U3D) Windows/Android/IOS 播放rtmp/rtsp方案
  3. Open3D编译安装
  4. java序列化_夯实Java基础系列22:一文读懂Java序列化和反序列化
  5. oracle awr报告生成_分享AWR报告的生成和简单分析方法
  6. 重新拾起VS2008加入战斗
  7. 破解 Ashley Madison 1100万个口令
  8. 使用RequireJS优化Web应用前端
  9. 卸载有卸载密码和安全策略的OFFICESCAN客户端(破解)
  10. 【redis】docker启动redis,redis常用命令
  11. 虚幻引擎4初探(UE4)
  12. Human Pose Estimation姿态估计调研
  13. pythonmat文件转excel,利用python将图片转换成excel文档格式
  14. VMware虚拟机中linux CentOS7上网联网,简单粗暴亲测有效
  15. android 网易新闻 详情页面实现,Android实现网易新闻客户端首页效果
  16. jquery变量var的使用
  17. configure: error: C++ preprocessor /lib/cpp fails sanity check
  18. 解决vscode下载速度太慢的问题
  19. Android Studio Cmake升级至最新版本
  20. C++怎么判断windows系统是64位还是32位

热门文章

  1. Jave之Scanner和不合法输入处理
  2. 【活动报名】2021蚂蚁链开发者大会
  3. 搜索 | 电商行业模版驱动业务增长实践
  4. 利用文件摘要简化游戏资源的引用管理
  5. 该如何在后期处理中,实现高亮描边的效果?
  6. 游戏AI——行为树理论及实现
  7. RHEL7 yum源配置
  8. 一天学完spark的Scala基础语法教程九、迭代器(idea版本)
  9. PHP的输入与输出(input与$_GET[“key“])
  10. 程序员删数据库事件引发的个人思考