树形算法题的思考

树形是一大题型,这类题目相对来说比较简单,在我看来掌握树形的最大要点就是递归的思想,这可以说用在了这类题目中的方方面面。主要涉及这些题型:

  • 构建树(数组,链表)
  • 遍历,判断是合理的树
  • 找节点(LCA)
  • 树的基本属性(高度),找路径

构建树

这类题目的基本思路就是先找到根结点(root),然后把整个数组或者链表分成左右两个部分。之后,这个根节点的左子树就是递归调用数组的右半部分。右半边子树就是递归调用,这个函数的右半部分。总体还是比较简单的,题目可以参看

这里有一道题,关于如何利用链表来构造。其中有一点,它可以使用一个固定的prev linked list node。在每次递归结束的时候都会调用next,这样我们就不需要每次遍历找到中心结点,而是利用之前的结果来找到中间的那个节点。也就是说,在这里我们并不需要一开始就把父节点找到,而是可以先存好左子树,之后再到root。

……

阅读全文