二叉树的深度平衡是啥意思?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了二叉树的深度平衡是啥意思?相关的知识,希望对你有一定的参考价值。
二叉树的深度平衡意味着左右子树的高度相差不会超过1。这种平衡的二叉树可以保证最坏时间复杂度为O(log n),因此常被用来实现查找、插入和删除操作的数据结构,如平衡二叉搜索树。 参考技术A采用边查找边插入的方式,类似重新建立一个一维数组时间复杂度=O(n)因为深度不平衡,所以会发展成单链的形状,就是一条线 n个点那么深。
二叉排序树是查找过程中,当树中不存在关键字等zhi于给定值的结点时再进行插入。新插入的结点一定是一个新添加的叶子结点,并且是查找不成功时查找路径上访问的最后一个结点的左孩子或右结点。
因此二叉排序树插入时间复杂度最大为O(n)。若是二叉排序树比较平衡,其时间复杂度下降,最小的时间复杂度为O(logn)。
扩展资料:
①结点:包含一个数据元素及若干指向子树分支的信息。
②结点的度:一个结点拥有子树的数目称为结点的度。
③叶子结点:也称为终端结点,没有子树的结点或者度为零的结点。
④分支结点:也称为非终端结点,度不为零的结点称为非终端结点。
⑤树的度:树中所有结点的度的最大值。
参考资料来源:百度百科-二叉树
平衡二叉树
题目:输入一棵二叉树,判断该二叉树是否是平衡二叉树。
这道题比较考验思维。平衡二叉树的条件是左、右子树的深度差不大于1,所以我们首先需要计算出二叉树的深度。而这道题需要返回的并不是深度,而是一个布尔值,因此我们初始认为这棵树是平衡的,在计算深度的过程中,如果发现左、右子树的深度大于1了,就将答案置为false。
计算深度我们应该另开一个函数进行递归操作,一棵树的深度是它的左子树和右子树这两者中最大的子树深度+1。递归计算左子树的深度和右子树的深度,返回的是整棵树的深度,在计算左、右子树深度的过程中,如果发现深度差大于1,就将答案置为false。
c++代码如下:
1 class Solution { 2 public: 3 bool ans = true; 4 bool IsBalanced_Solution(TreeNode* pRoot) { 5 dfs(pRoot); 6 return ans; 7 } 8 9 int dfs(TreeNode* pRoot){ 10 if(!pRoot) return 0; 11 int left = dfs(pRoot->left); 12 int right = dfs(pRoot->right); 13 if(abs(left - right) > 1) ans = false; 14 return max(left, right) + 1; 15 } 16 };
以上是关于二叉树的深度平衡是啥意思?的主要内容,如果未能解决你的问题,请参考以下文章