zoukankan      html  css  js  c++  java
  • 刷题笔记-Tree

    Lint 448. Inorder Successor in BST

    [https://www.lintcode.com/problem/inorder-successor-in-bst/description](Inorder Successor in BST)
    第一选择是 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

  • 相关阅读:
    hihocoder 1049 后序遍历
    hihocoder 1310 岛屿
    Leetcode 63. Unique Paths II
    Leetcode 62. Unique Paths
    Leetcode 70. Climbing Stairs
    poj 3544 Journey with Pigs
    Leetcode 338. Counting Bits
    Leetcode 136. Single Number
    Leetcode 342. Power of Four
    Leetcode 299. Bulls and Cows
  • 原文地址:https://www.cnblogs.com/kong-xy/p/9153658.html
Copyright © 2011-2022 走看看