LeetCode主题整理(2)树问题和相关问题

来源:互联网 发布:王夫之的知行 编辑:程序博客网 时间:2024/05/23 10:18

Topic 1: 关于遍历

      和树相关的第一个重要主题,是遍历。前序遍历(根,左子树,右子树),中序遍历(左子树,根,右子树),后序遍历(左子树,右子树,根),层序遍历(第一层也就是根节点所在的那层,第二层.....最后一层也就是叶节点所在的那层)是常见问题。

      前序,中序,后序,使用递归都非常好些,比较困难的解法是,如何用非递归的方式来遍历。按照代码的难度升序,是前序,中序,后序。都要使用到栈这个小数据结构。相关题目如下:

      Binary Tree Inorder Traversal     中序遍历
      Binary Tree Preorder Traversal    前序遍历
      Binary Tree Postorder Traversal     后序遍历

     层序遍历和层序遍历的变种在下面的题目中,都要使用队列这个小数据结构,相关题目如下:
      Binary Tree Level Order Traversal      从上向下层序遍历
      Binary Tree Level Order Traversal II      从下向上层序遍历
      Binary Tree Zigzag Level Order Traversal    从上向下之字形层序遍历
      Flatten Binary Tree to Linked List      把二叉树转变为链表,借助前序遍历进行转换


Topic 2: 关于递归

     和数相关的另外一个重要主题,是递归。其实在上面的遍历中,已经可以用递归解决不少问题了。但是接下来还有更多可以使用递归解决的问题。树本身的自相似的造型,决定了和树相关的题目是非常适合用递归的。相关题目如下:

     Construct Binary Tree from Preorder and Inorder Traversal      已知前序遍历和中序遍历,建树
     Construct Binary Tree from Inorder and Postorder Traversal    已知后序遍历和中序遍历,建树
     Balanced Binary Tree  判断一个二叉树是否是平衡的
     Symmetric Tree  判断一个二叉树是否是轴对称的,题意比较好理解,实际我觉得很容易写错的
     Minimum Depth of Binary Tree   求从root到叶节点的最小深度
     Validate Binary Search Tree    判断一棵树是否是二叉搜索树
     Recover Binary Search Tree    修正一棵树二叉搜索树中的两个发生对调的节点,使得新树成为合格的二叉搜索树
     Convert Sorted Array to Binary Search Tree    从排序数组构建二叉搜索树
     Convert Sorted List to Binary Search Tree    从排序链表构建二叉搜索树
     Sum Root to Leaf 通过递归计算从root到leaf的所有路径构成的数的和。
     Binary Tree Maximum Path Sum  未搞定待写   


Topic 3: 关于卡特兰数
     这个是比较数学的问题了。看到有几道和括号相关的题目和树相关的题目,本质都是卡特兰数问题。 卡特兰数还有很多应用,wiki一下很容易发现,我理解得不太深刻,先不写了,以后想清楚了再写其它应用场合。leetcode中和卡特兰数相关的树问题如下:
     Unique Binary Search Trees      (1~n)可以构成多少个不同的二叉搜索树?
     Unique Binary Search Trees II    把上面这些树构造出来。
     


      

     

0 0
原创粉丝点击