树问题的总结(一)

1.树是什么?

        树结构里的节点存在父子顺序结构,会有兄弟节点存在。这是数组结构不具备的。

        最长用的二叉树:即每个父节点,有两个子节点:左孩子|右孩子

        一般涉及到的概念:

                深度        高度       

树问题的总结(一)_第1张图片

2.树的种类

        森林:好多树

        树:从父节点引出多个子节点

        二叉树:每个父节点只有两个子节点:左孩子和右孩子

        满二叉树:从根往叶子,最大深度的倒数第二层,每个节点都有左孩子和右孩子,孩子总数为2^n-1。

        完全二叉树:从根往叶子,最大深度的倒数第二层,每个节点都有左孩子和右孩子或是叶子节点。最大深度层的叶子节点总是紧贴在左侧。

树问题的总结(一)_第2张图片

二叉搜索树:对于所有中间节点,中间节点的值大于所有左子树的值,小于所有右子树的值。

中序遍历:严格(一定没有重复值)单调增的序列

注意:是和子树所有节点比值的大小,而不仅仅是左子树|右子树的根节点的值。

树问题的总结(一)_第3张图片

3.解决树问题的模板

        树的遍历:

                前中后序遍历+层级遍历,共四种。

                前序遍历|先序遍历:对于树的每个节点总是先:中间节点、左子树、右子树顺序读取

                中序遍历:对于树的每个节点总是先:左子树、中间节点、右子树顺序读取

                后序遍历:对于树的每个节点总是先:左子树、右子树、中间节点顺序读取

                层级遍历:从根节点开始,逐层读取

树问题的总结(一)_第4张图片

        树问题解题关键三步

        做题前先确定:遍历的话,使用哪种遍历方式

        解题三步走:        

                1.确定返回值、方法参数

                2.确定终止条件

                3.确定单层递归逻辑

        一般来说:解决树问题可以有两种解题方法,即递归和迭代

        递归和迭代的区别:

                递归:使用方法栈来记录当前节点状态及其他关键信息,深层递归容易栈溢出。

                迭代:自定义栈来维护节点关键信息,模拟递归。可以解决部分栈溢出问题。

4.总结

  二叉树算法解题捋思路过程:        

        1.什么遍历方式?

        2.返回值和参数列表是什么?

        3.递归的终止条件是什么?(先考虑递归解题思路)

        4.单层递归逻辑是什么?

        5.完善递归代码。递归不用自己用栈做维护,可以用来快速解题。

        6.对性能有要求,可以将递归解题思路转迭代,用栈来维护节点的遍历顺序。

你可能感兴趣的:(刷题训练营,数据结构,算法,leetcode)