刷题笔记-Tree

Lint 448. Inorder Successor in BST

https://www.lintcode.com/problem/inorder-successor-in-bst/description
第一选择是 p.right 的 leftMost节点
第二选择是 p.parent, 但是如果没有给出parent指针, 而只是给出了root根节点,那么就需要一个变量来保存可能的successor

445. Add Two Numbers II

head的头结点要不断新建出来,从后向前生成一个新的链表

while之中创建的元素只能存在于while 循环之中,在while 循环之外无法访问
sum 没有及时更新,导致元素之间相互累加产生错误

543. Diameter of Binary Tree

路径长度应该只是 left + right 而不是 left + right + 1, 计算最大的depth需要进行+1的操作
typo: mex -> max

自己写的代码虽然能够AC, 但是运行效率太低,原因在于用递归遍历了整棵树两次,计算maxDepth的时候就是使用了 improve之后的代码是用了max作为全局变量,然后在maxDepth计算depth的过程之中直接就将Longest path计算在内

257. Binary Tree Paths

使用Integer.toString() 进行数据类型的转换,build String 的方法是使用 currPath = currPath + "->" + Integer.toString(root.val)

617. Merge Two Binary Tree

为什么会报错 runtime error ??

111. Minimum Depth of Binary Tree

层序遍历,如果是叶节点直接返回一个当前层数
linkedlist typo

106. Construct Binary Tree from Inorder and Postorder Traversal

105. Construct Binary Tree from Inorder and Preorder Traversal

  • Inorder 确定了左右子树的结构, Preorder/Postorder 确定root节点的位置, 然后根据左右子树进行分割
  • Index - preStart是左子树长度 preEnd - preStart是右子树长度
  • 如何在helper里面进行分割?
    • helper的头结点一定是子树的根节点, 找到root节点之后, 根据root节点来分左右节点
  • 左右子树的root节点位置不同,对于postorder / preorder子树的结构需要分开考虑
  • helper function直接返回一个node节点, 先做当前层, 再分别递归调用构造下层的结构, 直到终止条件, 所有的节点都被构造好了。 postorder 左右子树分别为空的时候, 左子树为0 index < 0, 右子树不存在 inorderStart > inorderEnd, preorderStart > preorderEnd

难道必须要使用inorder进行分割?

297. Serialize and Deserialize Binary Tree

  • 思路: 进行树的遍历即可, 用一个Queue结构进行辅助遍历。
  • 最底层的叶子节点一定是null,所以递归需要处理两个base case:
    1. queue为空, 没有多余的节点
    2. 遍历到了最底层的null 节点, 需要回头返回上层继续进行遍历

449. Serialize and Deserialize BST

  • BST可以做什么优化么?queue不需要遍历到最底层再进行判断, 可以在中间通过upper_limit进行截断

538. Convert BST to Greater Tree

本质上是一个右 根 左的中序遍历, 递归实现, 如何做加法?
sum += cur.val; cur.val = sum
为什么需要一个单独的void 函数来进行处理?? 为了避免设定全局变量?

226. Invert Binary Tree

AC: 一个temp 变量存左子树,然后 左换右, 右换temp, 递归结束

572. Subtree of Another Tree

我的思路: 定义一个 isSame() function, 遍历较大的那棵树,如果有一个节点与 t节点相等,判断 isSame(s, t), 如果相同,则直接返回true, 否则继续遍历子节点,知道完成全树的遍历
逻辑错误,应当逐渐缩小范围来进行搜索,下沉? 先判断 isSame() 然后再给subtree,

110. Balanced Binary Tree

定义result type ? 必须要有一个对接的function helper() 返回 不需要写一个多余的getHeight() function, 自动在helper当中直接计算即可
功能定义混乱

Path相关

Path相关的题目一般都是要用到 DFS,

437. Path Sum III

  • 描述: 给出一棵二叉树, 找到值为sum的path的数量
  • 思路: 每个点都可能是起点, 对于树的长度, 大小都没有任何限制, 向下递归找到以该树为起点的,

124. Binary Tree Maximum Path Sum

转载于:https://www.cnblogs.com/kong-xy/p/9153658.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值