经典算法题之(二)------ 二叉树题型总结

本文探讨了二叉树的非递归遍历方法,包括先序、中序和后序遍历,并讨论了如何利用这些遍历来求节点数目、深度及最大宽度。特别关注了二叉搜索树(BST)的特性,介绍了如何判断一个序列是否为BST的遍历结果,并在此基础上重建二叉树。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

非递归版本的三种遍历方式:

 

 

 

 

求符合某一条件的节点的数目:

应该算是二叉树的最基本题目

显然,不论采用递归还是非递归版本,无论是先序,中序还是后序方式,思路是一样的,设一全局计数量--count

在访问节点处放置判断条件,若符合条件则count++

这可以有无数个变式:

  • 求节点个数(相当于限制条件为空)
  • 求值等于/小于/大于x的节点个数
  • 求叶子节点数
  • 求只有左子树/右子树的节点(树)的个数

 

 

递归和非递归版本求二叉树深度:

 

 

 

求二叉树最大宽度

 

 

 

牛客剑指offer中

判断一个序列是否为一个二叉搜索树的后序遍历结果,挺好的一道题

问题:判断一个一个序列是否为一个二叉搜索树的先序遍历?

再进一步,如果是的,重建该二叉树,返回根节点

 

 

注意上面有个前提条件:BST

若没有此条件,则一定不能判断是否为先序遍历,更不要提重建

一个有趣的问题是,先序,中序,后序中,至少要知道什么条件才可以重建二叉树?

答案是:先序和中序,中序和后序

回到上面BST,其实告诉BST就等于知道了中序结果,所以可以想见,再给出先序或者后序都可以判断 + 重建 此二叉树

 

 

结合上面的两点,做题时看清题干:有没有保证输入就一定是两个遍历的结果,还是要先判断是否合法,再重建。显然,直接给两个合法序列,只重建要简单。

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值