【leetcode】二叉搜索树迭代器

参考题解

参考讲解,讲解很清楚,有图片之后更清楚了
https://leetcode-cn.com/problems/binary-search-tree-iterator/solution/fu-xue-ming-zhu-dan-diao-zhan-die-dai-la-dkrm/

这里复述阐释第2种思路,next和has_next的时间复杂度平摊是O(n),空间复杂度是O(h),h是树的高度

类中维护一个堆栈,后面发现它是一个单调递增栈(从底到顶部是从大到小的)
➡️初始化迭代器
在堆栈中push进去根节点的左节点, 一路左节点放进去
➡️next
pop出堆栈顶部元素,接下来如果此pop出来的节点有右子树,把它和它的一路左节点push到堆栈里
➡️has_next
堆栈不是空的,返回true

知识点小笔记

(1)二叉搜索树的中序遍历是递增的有序序列
(2)树结构和堆栈/队列有结构组合,奇妙,感觉很炸裂啊
(3)python数据结构中的list有pop和append两个方法,等价于堆栈数据结构的pop和push哦哦

再刷

迭代法:

(1)需要堆栈

类中保存中序遍历结果

(1)构造类的时候将中序遍历的结果保存在队列中
(2)需要新增一个函数,实现二叉搜索树的中序遍历

你可能感兴趣的:(python,leetcode,leetcode,算法,python)