平衡二叉树、完全二叉树、二叉搜索树的区别

220 阅读1分钟

1、平衡二叉树

定义

(1) 左、右子树的高度之差不大于 1。

(2) 左、右子树也分别为平衡二叉树。

结构图

image.png

2、完全二叉树

定义

(1) 所有叶子结点都出现在 k 或者 k-1 层,而且从 1 到 k-1 层必须达到最大结点数 (K 为树的深度)。

(2) 第 k 层可以不是满的,但是第 k 层的所有结点必须集中在最左边。

结构图

image.png

3、二叉搜索树

定义

(1) 若左子树不为空,则左子树上所有结点的值均小于它的根结点的值。

(2) 若右子树不为空,则右子树上所有结点的值均大于或等于它的根结点的值。

(3) 左、右子树也分别为二叉搜索树。

结构图

image.png

二叉树的遍历

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);
    }
};