
2021秋招部分笔试题
发布日期:2021-05-07 06:55:44
浏览次数:23
分类:精选文章
本文共 1347 字,大约阅读时间需要 4 分钟。
2021秋招部分笔试题汇总 企业提供原题 00:00:28
4/6 [编程题]查找二叉搜索树的叶子节点 时间限制:C/C++ 1秒,其他语言2秒空间限制:C/C++ 32M,其他语言64M
给一个二叉查找树(Binary Search Tree)的前序遍历结果数组,打印出所有的叶子节点。
输入描述:
输入为二叉查找树的前序遍历结果数组,元素之间用空格分隔:9 8 7 10
输出描述:
所有的叶子节点元素,用空格分隔解释:因为二叉搜索树的表示为:
9
8 10
7
输出的叶子节点为: 7 10
输入例子1:
9 8 7 10输出例子1:
7 101.首先我们要知道什么是二叉查找树,就是每一个节点的左子树都要小于它,它的右子树都要大于它。
又因为是前序遍历的顺序。我们知道第一个点肯定是根节点,那么我们就找数组里面第一个大于它的元素,第一个大于它的点的右边就是它的右子树,而从它开始到第一个大于它的节点部分就是它的左子树,我们递归的遍历遍历这个过程,当左边界等于右边界时,代表当前元素已经没有孩子了,直接输出这个结点即可。注意一下边界情况即可。`
#include#include #include #include using namespace std;const int maxn=1e6;int a[maxn];int findindex(int start, int ed ,int target)//找第一个大于它的数 { int i; for (i = start; i <= ed; i++) { if (a[i] > target) return i; } return i;}void dfs(int start, int en) { if (start > en) return; if (start == en) //没有左右子树 { cout << a[start] << " "; return; } int index = findindex(start+1, en, a[start]); if (index <= en) //说明当前结点有左子树和右子树需要分别遍历其左右子树,因为是前序,所以每一个start都是根结点,或者叶子结点 { dfs(start+1, index-1 ); dfs(index, en ); } else//说明只有左子树,只需要遍历左子树即可 { dfs(start+1, index-1); }}int main() { char c; int i=0; do{ scanf("%d",&a[i++]); scanf("%c", &c); }while(c==' '); // cout< <
发表评论
最新留言
第一次来,支持一个
[***.219.124.196]2025年04月11日 08时02分08秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
Linux常用统计命令之wc
2021-05-09
Git安装及使用以及连接GitHub方法详解
2021-05-09
docker容器与虚拟机的区别
2021-05-09
shell脚本里使用echo输出颜色
2021-05-09
Python2跟Python3的区别
2021-05-09
并发编程——IO模型详解
2021-05-09
Java之封装,继承,多态
2021-05-09
wait()与notify()
2021-05-09
详细总结js中的对象创建模式
2021-05-09
使用js打印时去除页眉页脚
2021-05-09
Spring security OAuth2.0认证授权学习第二天(基础概念-RBAC)
2021-05-09
ORA-00904: "FILED_TYPE": 标识符无效
2021-05-09
Redis系统学习之Redis性能测试工具
2021-05-09
数据仓库系列之维度建模
2021-05-09
Scala教程之:函数式的Scala
2021-05-09
java中DelayQueue的使用
2021-05-09
java程序员从小工到专家成神之路(2020版)-持续更新中,附详细文章教程
2021-05-09
线程stop和Interrupt
2021-05-09
Android中定时执行任务的3种实现方法
2021-05-09
nodejs中npm常用命令
2021-05-09