> 文章列表 > 代码随想录之平衡二叉树

代码随想录之平衡二叉树

引言:在数据结构和算法的世界里,平衡二叉树就像是一位优雅的舞蹈家,它在高度上的平衡确保了它的优雅步伐。这种树形结构不仅美观,而且在数据搜索和排序中的效率如同舞者在舞台上的流畅表现。


相关问题:你是否曾在数据分析的道路上遭遇过“倾斜的平衡”?在处理大量数据时,是否曾遇到过树形结构的不平衡,导致查询效率急剧下降?


相关答案:平衡二叉树的概念就像是调整舞者的姿势,使每个节点的左右子树高度差不超过1。这要求我们在插入或删除节点时要精心调整,确保每一步都稳健而平衡。通过定期检查节点的平衡因子(左右子树的高度差),我们可以使用递归函数来快速识别并调整不平衡的节点,恢复整个树的平衡。


为了更直观地理解,设想一棵树,它的每个节点都像是一个舞蹈者在空中保持完美的姿势。如果舞者的脚尖和脚后跟在同一条线上,那么这棵树就是平衡的。如果某个舞者的脚尖或脚后跟超出了一条线,那么这棵树就是不平衡的,需要通过调整来恢复平衡。


通过这样的平衡调整,平衡二叉树不仅保证了数据的稳定性,还确保了操作的高效性。这就像是舞者在舞台上完美地完成了一个高难度的旋转,赢得了观众的喝彩。在计算机算法的世界,这种平衡性就是我们追求的“完美表演”。

代码随想录之平衡二叉树

代码随想录之平衡二叉树
本题思路是针对高度,只不过是判断高度之差的绝对值是否大于1罢了,这里引入特殊变量-1用来说明不是平衡二叉树
如果左右子节点对应的子树有一个不是平衡二叉树就一直-1返回到头了。
只有全是平衡二叉树时才正常运行完。

class Solution {
public:int traversal(TreeNode* cur){if(cur == nullptr) return 0;int l_dept = traversal(cur->left);if(l_dept == -1) return -1;int r_dept = traversal(cur->right);if(r_dept == -1) return -1;return abs(r_dept-l_dept)>1? -1:1+max(r_dept,l_dept);        }bool isBalanced(TreeNode* root) {return traversal(root) != -1;}
};