1、平衡二叉树
定义:
(1) 左、右子树的高度之差不大于 1。
(2) 左、右子树也分别为平衡二叉树。
结构图:
2、完全二叉树
定义:
(1) 所有叶子结点都出现在 k 或者 k-1 层,而且从 1 到 k-1 层必须达到最大结点数 (K 为树的深度)。
(2) 第 k 层可以不是满的,但是第 k 层的所有结点必须集中在最左边。
结构图:
3、二叉搜索树
定义:
(1) 若左子树不为空,则左子树上所有结点的值均小于它的根结点的值。
(2) 若右子树不为空,则右子树上所有结点的值均大于或等于它的根结点的值。
(3) 左、右子树也分别为二叉搜索树。
结构图:
二叉树的遍历
1、前序遍历
2、中序遍历:常用于对二叉搜索树进行递增排序
3、后序遍历
eg: 剑指 Offer 54. 二叉搜索树的第k大节点
class Solution {
public:
TreeNode* ans;
int kthSmallest(TreeNode* root, int k) {
dfs(root, k);
return ans->val;
}
void dfs(TreeNode* root, int& k)
{
if (!root) return;
// 左
dfs(root->left, k);
//根
k--;
if (k == 0) ans = root;
// 右
dfs(root->right, k);
}
};