代码随想录二叉树part01|二叉树的理论基础
- 理论基础
- `种类`:
- `存储方式`:
- `二叉树的遍历`:
- `二叉树定义方式`:
理论基础
代码随想录文档讲解
种类
:
- 满二叉树,节点数量: 2 n − 1 2^n-1 2n−1
- 完全二叉树,从左到右是满的
- 二叉搜索树:左子树的所有节点都小于中间节点的值,右子树的所有节点都大于中间节点的值。(对树的结构没有要求,只要求节点的值)
- 平衡二叉搜索树:左子树和右子树高度的绝对值的差不超过1【map、set等树都是】
存储方式
:
- 链式存储
链表指向它的左右孩子 - 线式存储
下标设定一个数,作为数组的索引
给你一个节点的下标,找它左右孩子的下标: 2 i + 1 、 2 i + 2 2i+1、2i+2 2i+1、2i+2
二叉树的遍历
:
与图论中的两种遍历方式一致:深度优先搜索,广度优先搜索
- 深度优先:前、中、后序遍历
前序:根左右、后序:左右根、中序:左根右 - 广度优先:层序遍历
- 迭代法遍历二叉树:非递归的方法;上述两种遍历方式都存在递归形式和非递归形式
二叉树定义方式
:
struct TredNode{int val;TreeNode *left;TreeNode *right;TreeNode(int x) : val(x), left(NULL), right(NULL) {}
}
class TreeNode:def __init__(self, val, left = None, right = None):self.val = valself.left = leftself.right = right