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

二叉树基础知识

深度:对于任意节点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. 层次遍历(迭代法)

 

 

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

struct TreeNode{
    int val;
    TreeNode* left;
    TreeNode* right;
    TreeNode(int x) : val(x), left(NULL), right(NULL){}

};

  

二叉树用列表生成

//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 @ 2022-03-01 16:08  PiaYie  阅读(65)  评论(0编辑  收藏  举报