leetcode-二叉树

295 阅读1分钟

二叉树理论基础

种类

  • 满二叉树 : 每一层都是满的,节点数量2^n - 1
  • 完全二叉树 : 除了底层其他层都满,底层从左到右连续
  • 堆 : 有序的二叉树,顺序规则分为大顶和小顶(c++ priority_queue就是一个堆)
  • 二叉搜索树(BST): 有序的二叉树,左小右大
  • 平衡二叉搜索树 :每个左右子树高度差小于等于1的二叉搜索树(红黑树是高度平衡二叉搜索树,c++ map/set/multimap/multiset)

存储方式(做题一般都是链式)

  • 链式存储
struct TreeNode {
    int val;
    TreeNode* left;
    TreeNode* right;
    TreeNode() : val(0), left(nullptr), right(nullptr) {};
    TreeNode(int val) : val(val), left(nullptr), right(nullptr) {};
    TreeNode(int val, TreeNode* left, TreeNode* right) : val(0), left(left), right(right) {};    
}
  • 线式存储

二叉树遍历

  • DFS (一般用递归或栈(迭代法)实现)

递归三部曲

  • 递归参数和返回值

  • 递归出口

  • 单层递归逻辑 1

  • 前序 从根出发,每个子树中左右,处理中,遍历左,遍历右

  • 中序 从根出发,每个子树左中右, 遍历左,处理中,遍历右

  • 后序 从根出发,每个子树左右中,遍历左,遍历右,处理中

  • BFS (一班用队列视线) 层序