Tree

Basic Concept

  • What is Tree:

    • 仅有唯一一个根节点,没有则为空树

    • 除根节点外,每个节点都有且仅有一个父节点

    • 节点间不能形成闭环

  • node、root、brother node、leaf node、parent node、child node

  • branch

  • level:根为第一层,根的孩子为第二层,依此类推

  • height of node:叶子节点到该节点的最长路径,根节点的高度为树的高度

  • depth of node:从根节点到该节点所经历的边的个数(根节点的深度和叶子节点的高度都是 0)

  • width

  • 二叉树,三叉树... N 叉树,由其子节点最多可以有几个决定,最多有 N 个就是 N 叉树

    • ==完全二叉树==:深度为h,除第h层外,其它各层(1 ~ h-1)的结点数都达到最大个数,第h层所有的结点都连续集中在最左边

    • ==满二叉树==:除了叶结点外每一个结点都有左右孩子且叶子结点都处在最底层的二叉树

    • ==二叉搜索树==:左孩子节点值均==小于==该节点值、右孩子节点值均==大于==该节点值,该节点的左、右子树也分别为二叉搜索树

    • 平衡二叉搜索树(AVL):既满足左右子树高度差不大于 1, 又满足任意节点值大于它的左孩子节点值,小于它右孩子节点值

    • 红黑树

      • 节点是红色或黑色

      • 根节点必须是黑色节点

      • 所有的叶子节点都必须是值为 NULL 的黑节点

      • 如果一个节点是红色的,则它两个子节点都是黑色的

      • 从任一节点到达它的每个叶子节点的所有的路径,都有相同数目的黑色节点

    • Trie(字典树或前缀树,它是用来处理字符串匹配问题的数据结构,以及用来解决集合中查找固定前缀字符串的数据结构,高效的存储和查找字符串)

解题要素

  • 一个中心:遍历

  • 两个基本点:DFS(preorder/inorder/postorder 使用 stack)、BFS(迭代,使用 queue)

  • 三种题型:搜索类、构建类、修改类

  • 四个重要概念:二叉搜索树(==中序遍历是有序的==)、完全二叉树、路径、距离

  • 七个技巧

    • dfs(root)

    • 单/双递归(如果题目有类似,任意节点开始xxx或者所有xxx这样的说法,就可以考虑使用双递归,但是如果递归中有重复计算,则可以使用双递归 + 记忆化或者直接单递归)

    • 前后遍历

      • 自顶向下:就是在每个递归层级,首先访问节点来计算一些值,并在递归调用函数时将这些值传递到子节点,一般是通过参数传到子树中

      • 自底向上:是另一种常见的递归方法,首先对所有子节点递归地调用函数,然后根据返回值和根节点本身的值得到答案

    • 虚拟节点

    • 边界

    • 参数扩展大法

    • 返回元组/列表

Binary Tree Problem List

Binary Tree Traversal

Preorder/Inorder/Postorder

144. ==二叉树前序遍历==

589.N 叉树的前序遍历

94. ==二叉树中序遍历==

145. ==二叉树后序遍历==

590.N 叉树的后序遍历

Level Traversal

102. ==二叉树的层序遍历==

429.N 叉树的层序遍历

103.==二叉树的锯齿形层序遍历==

515.==在每个树行中找最大值==

199.二叉树的右视图

Others

987.二叉树的垂序遍历

Binary Search Tree

CRUD

98.==验证二叉搜索树==

99.恢复二叉搜索树

669.修剪二叉搜索树

700.二叉搜索树中的搜索

701.二叉搜索树中的插入操作

Others

96.不同的二叉搜索树

95.不同的二叉搜索树 II

108.==将有序数组转换为二叉搜索树==

109.有序链表转换二叉搜索树

230.==二叉搜索树中第 K 小的元素==

235.==二叉搜索树的公共祖先==

538.把二叉搜索树转换为累加树

DFS/BFS

100.==相同的树==

101.==对称二叉树==

226.==翻转二叉树==

104.==二叉树的最大深度==

111.==二叉树的最小深度==

110.平衡二叉树

222.完全二叉树的节点个数

662.二叉树最大宽度

543.二叉树的直径

563.二叉树的坡度

257.==二叉树的所有路径==

236.==二叉树的最近公共祖先==

1123.最深叶节点的最近公共祖先

652.寻找重复的子树

Path Sum

404.左叶子之和

112.==路径总和==

113.==路径总和 II==

437.路径总和 III

124.二叉树中的最大路径和

129.==求根到叶子节点数字之和==

Serialize/Deserialize

105.==从前序与中序遍历序列构造二叉树==

106.==从中序与后序遍历序列构造二叉树==

1008.前序遍历构造二叉搜索树

297.二叉树的序列化与反序列化

654.最大二叉树

114.二叉树展开为链表

116.填充每个节点的下一个右侧节点指针

Last updated