【华为练习题】二叉树遍历
来源:互联网 发布:淘宝售后服务专员认证 编辑:程序博客网 时间:2024/06/06 00:14
【华为练习题】二叉树遍历
题目
二叉树遍历
描述: 二叉树的前序、中序、后序遍历的定义:
前序遍历:对任一子树,先访问跟,然后遍历其左子树,最后遍历其右子树;
中序遍历:对任一子树,先遍历其左子树,然后访问根,最后遍历其右子树;
后序遍历:对任一子树,先遍历其左子树,然后遍历其右子树,最后访问根。
给定一棵二叉树的前序遍历和中序遍历,求其后序遍历(提示:给定前序遍历与中序遍历能够唯一确定后序遍历)。
输入:
两个字符串,其长度n均小于等于26。
第一行为前序遍历,第二行为中序遍历。
二叉树中的结点名称以大写字母表示:A,B,C….最多26个结点。
输出:
输入样例可能有多组,对于每组测试样例,
输出一行,为后序遍历的字符串。
样例输入:
ABC
BAC
FDXEAG
XDEFAG
样例输出:
BCA
XEDGAF
分析
用递归的方式生成二叉树,再对二叉树进行后续遍历
解答
#include <iostream>#include <string>using namespace std;struct BTreeNode{ char value; BTreeNode *left; BTreeNode *right;};void findBack(const string &front, const string &mid, BTreeNode *root){ char value = front[0]; int index = mid.find(value), length = (int)front.size(); if (index < 0) return; if (index > 0) { char leftValue = front[1]; BTreeNode *left = new BTreeNode; root->left = left; left->value = leftValue; left->left = NULL; left->right = NULL; findBack(string(front.begin()+1, front.begin()+index+1), string(mid.begin(), mid.begin()+index),left); } if (index < length - 1) { char rightValue = mid[index + 1]; BTreeNode *right = new BTreeNode; root->right = right; right->value = rightValue; right->left = NULL; right->right = NULL; findBack(string(front.begin()+index+1, front.end()), string(mid.begin()+index+1,mid.end()),right); }}void backVisit(BTreeNode *root){ if (root->left) backVisit(root->left); if (root->right) backVisit(root->right); cout << root->value; delete root;}int main(){ string front, mid; while (cin >> front >> mid) { BTreeNode *root = new BTreeNode; root->value = front[0]; findBack(front, mid, root); backVisit(root); cout << endl; } return 0;}
0 0
- 【华为练习题】二叉树遍历
- [华为机试练习题]10.二叉树遍历
- 华为OJ 二叉树遍历
- 数据结构练习题---先序遍历二叉树
- 数据结构练习题---后序遍历二叉树
- 数据结构练习题---先序遍历二叉树
- 二叉树的三种遍历练习题
- 数据结构练习题---先序遍历二叉树
- [华为机试练习题]33.二叉搜索树
- 数据结构练习题——先序遍历二叉树
- [华为机试练习题]42.求二叉树的深度和宽度
- 二叉树练习题
- 二叉树练习题
- 二叉树打印练习题
- 二叉树7:折纸练习题
- 二叉树部分相关练习题
- 二叉树 遍历|统计叶子节点|求深度|交换左右子树|查找是否存在某个特定叶子节点练习题
- 二叉树遍历、分层遍历
- Glide入门教程——5.图片大小调整 & 缩放
- 嵌入式开发第44天(GPIO的使用)
- web前端学习(6)
- [Android] ListView/GridView 滚动时动态填充空白边距padding(android:clipToPadding)
- LeetCode进阶之路(Unique Paths)
- 【华为练习题】二叉树遍历
- 暗黑字符串
- Glide入门教程——6.播放Gif & 视频
- strncpy源码
- 区块链小结及思考
- 约束
- Glide入门教程——7. 缓存基础
- 网易面试总结
- Glide入门教程——8. 请求优先级