代码随想录:二叉树知识清单

二叉树基础知识

深度:对于任意节点R,R的深度为从根到R的唯一路径长,根的深度为0(或者1);
高度:对于任意节点R,R的高度为从R到一片树叶的最长路径长,所有树叶的高度为0(或者1);
结点的层次:规定根结点在1层,其它任一结点的层数是其父结点的层数加1
树的深度:树中所有结点中的最大层次是这棵树的深度

二叉树的深度

最大深度 / 最小深度 其实就是根节点到叶子节点的 最大距离 / 最小距离

满二叉树和完全二叉树

满二叉树

一个二叉树,如果每一个层的结点数都达到最大值,则这个二叉树就是满二叉树。也就是说,如果一个二叉树的层数为K,且结
点总数是(2^k) -1 ,则它就是满二叉树。
一颗树深度为h,最大层数为k,深度与最大层数相同,k=h;
第k层的结点数是: 2^(k-1)  总结点数是: 2^k-1 (2的k次方减一)  总节点数一定是奇数。

完全二叉树

完全二叉树的节点数是任意的,从形式上讲它是个缺失的的三角形,但所缺失的部分一定是右下角某个连续的部
分,最后那一行可能不是完整的,对于k层的完全二叉树,节点数的范围2^ (k - 1) -1 < N< 2^k - 1;

在一棵二叉树中,除最后一层外,若其余层都是满的,并且最后一层或者是满的,或者是在右边缺少连续若干节点,则此二叉树为完全二叉树。

 

二叉搜索树和平衡二叉搜索树

搜索树和一般的二叉树区别在于:有序

排序规则如下:

  • 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值;
  • 若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值;
  • 它的左、右子树也分别为二叉排序树

如果二叉搜索树的左右两个子树的高度差的绝对值不超过1,并且左右两个字数都是平衡二叉树,那么这就是一棵平衡二叉搜索树

 

二叉树的存储方式

  • 链式存储用指针
  • 顺序存储用链表

 

二叉树的遍历方式

  • 深度优先遍历 DFS
    1. 前序遍历(递归法,迭代法)
    2. 中序遍历(递归法,迭代法)
    3. 后序遍历(递归法,迭代法)
  • 广度优先遍历 BFS
    1. 层次遍历(迭代法)

 

 

二叉树的定义-手撸结构体

1
2
3
4
5
6
7
struct TreeNode{
    int val;
    TreeNode* left;
    TreeNode* right;
    TreeNode(int x) : val(x), left(NULL), right(NULL){}
 
};

  

二叉树用列表生成

1
2
3
4
5
6
7
8
9
10
11
12
//vector 前序遍历 生成树
TreeNode* buildtree(vector<int> array, int index)
{
    TreeNode* root = nullptr;
    if (index < array.size() && array[index] != NULL)
    {
        root = new TreeNode(array[index]);
        root->left = buildtree(array, 2 * index + 1);
        root->right = buildtree(array, 2 * index + 2);
    }
    return root;
}

  

 

 

根据Cral哥整理的题目,二叉树知识有以下几类:

 

 

 

二叉树的遍历方式

https://www.cnblogs.com/PiaYie/p/15951793.html

二叉树的属性

https://www.cnblogs.com/PiaYie/p/15965325.html

二叉树的修改与改造

https://www.cnblogs.com/PiaYie/p/15965348.html

二叉树公共祖先问题

 

二叉搜索树的属性

 

二叉搜索树的修改与构造

 

posted @   PiaYie  阅读(86)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
历史上的今天:
2021-03-01 使用位运算替代模运算,为了高效做模除最好选择mod除(2^n)
点击右上角即可分享
微信分享提示