三种遍历
后序遍历时,遍历到一个节点的右子树时,需要考虑右子树有没有遍历过,这需要一个pre节点记录。
二叉树剪枝
递归代码实现,考虑用后序遍历,左右子树为null,且当前节点为0,则retuen null.
序列化和反序列化
序列化:前序遍历适合,每遍历一个节点,记录节点的值,为空就设为#
反序列化:先分割字符串,然后一个个字符遍历,拼接成树,设一个数组记录当前遍历字符串的下标
从根节点到叶节点路径数字之和
思路:前序遍历
向下的路径节点值之和
思路:前序遍历,用一个map存储根节点到每个遍历过得节点的值总和,当遍历到一个节点时,查看map中是否有当前节点到根节点路径总和-8的值,存在则count++
节点值之和最大的路径
思路:首先判断是后续遍历,然后要知道一条路径,如果同时包括左右节点,则该路径一定不包括当前节点的父节点,因此需判断左子节点路径和,右子节点路径和以及经过当前节点的路径和中的最大值,存于maxSum数组中,而dfs方法的返回值则是左路径和右路径中的最大值(包括打当前节点)。
展平二叉搜索树
思路:二叉搜索树考虑用中序遍历,定义一个pre节点,每次遍历将pre指向cur,first节点用来第一次遍历时指向cur,用来最后返回头结点。
二叉搜索树的下一个节点
思路:1中序遍历,利用一个flag , 找到后flag为true,然后返回下一个节点
2 二分查找
所以大于或等于节点值之和
思路:使用逆序的中序遍历