关于c++的二叉树等作业整理思路

一、判断给定二叉树是否是二叉排序树

(听起来很简单的一道题,可能由于我之前的递归等没有理解透彻所以今天花了我快两个小时,于是痛定思痛,好好学习递归算法)

(小bug)心累啊,(c++)引用的话传参数不能传常量。
总算是搞明白了一下递归
1、首先建立一个临时的叫last的结点,为了储存遍历的前一个
2、由于递归时没有全局变量让你玩,那么就得一个个需要变动的传引用,这样参能保证每一次的实时变动。
3、最开始地last赋值问题,利用一个count为其赋值杠杠的~~~
4、遍历时每次都要进行判断,看满不满足条件!


遍历(程序整体+结束条件)

最后总结一下怎么写遍历的算法
写遍历算法的话
1、首先把每一步做什么的先后顺序理出来。
2、哪里需要递归写上递归函数即可!

3、结束条件!!

二、编写递归算法从大到小输出二叉排序树中所有关键字不小于x的数据元素,要求时间复杂度为O(log2n+m),其中n为二叉排序树中所含结点数,m为输出的元素个数。

哈哈果然!弄清楚原理第二题加上弄那些语法的bug,最后弄出来花了我二十分钟!(还是有点久)

其实这道题很好解决!已经是二叉排序树了,那么我们写一个后序遍历不就是从大到小遍历吗?然后判断是否大于,大于则输出,不大于则return(为了复杂度)


首先遍历到最右边的点O(log2n),然后输出m次点的数值O(m),哈哈最后算法复杂度O(log2n+m)妥妥的!!


还有题过几天写~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值