剑指offer 树

三种遍历

后序遍历时,遍历到一个节点的右子树时,需要考虑右子树有没有遍历过,这需要一个pre节点记录。

二叉树剪枝

递归代码实现,考虑用后序遍历,左右子树为null,且当前节点为0,则retuen null.

序列化和反序列化

序列化:前序遍历适合,每遍历一个节点,记录节点的值,为空就设为#

反序列化:先分割字符串,然后一个个字符遍历,拼接成树,设一个数组记录当前遍历字符串的下标

从根节点到叶节点路径数字之和

思路:前序遍历

向下的路径节点值之和

思路:前序遍历,用一个map存储根节点到每个遍历过得节点的值总和,当遍历到一个节点时,查看map中是否有当前节点到根节点路径总和-8的值,存在则count++

节点值之和最大的路径

思路:首先判断是后续遍历,然后要知道一条路径,如果同时包括左右节点,则该路径一定不包括当前节点的父节点,因此需判断左子节点路径和,右子节点路径和以及经过当前节点的路径和中的最大值,存于maxSum数组中,而dfs方法的返回值则是左路径和右路径中的最大值(包括打当前节点)。

展平二叉搜索树

思路:二叉搜索树考虑用中序遍历,定义一个pre节点,每次遍历将pre指向cur,first节点用来第一次遍历时指向cur,用来最后返回头结点。

二叉搜索树的下一个节点

思路:1中序遍历,利用一个flag , 找到后flag为true,然后返回下一个节点

2 二分查找

所以大于或等于节点值之和

思路:使用逆序的中序遍历

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值