非递归版本的三种遍历方式:
求符合某一条件的节点的数目:
应该算是二叉树的最基本题目
显然,不论采用递归还是非递归版本,无论是先序,中序还是后序方式,思路是一样的,设一全局计数量--count
在访问节点处放置判断条件,若符合条件则count++
这可以有无数个变式:
- 求节点个数(相当于限制条件为空)
- 求值等于/小于/大于x的节点个数
- 求叶子节点数
- 求只有左子树/右子树的节点(树)的个数
递归和非递归版本求二叉树深度:
求二叉树最大宽度
牛客剑指offer中
判断一个序列是否为一个二叉搜索树的后序遍历结果,挺好的一道题
问题:判断一个一个序列是否为一个二叉搜索树的先序遍历?
再进一步,如果是的,重建该二叉树,返回根节点
注意上面有个前提条件:BST
若没有此条件,则一定不能判断是否为先序遍历,更不要提重建
一个有趣的问题是,先序,中序,后序中,至少要知道什么条件才可以重建二叉树?
答案是:先序和中序,中序和后序
回到上面BST,其实告诉BST就等于知道了中序结果,所以可以想见,再给出先序或者后序都可以判断 + 重建 此二叉树
结合上面的两点,做题时看清题干:有没有保证输入就一定是两个遍历的结果,还是要先判断是否合法,再重建。显然,直接给两个合法序列,只重建要简单。