2013-01-22 48 views
-2

我需要实现一个非递归函数来确定二叉树是否平衡。检查二叉树是否与迭代函数平衡?

有人吗?

谢谢!

+2

你试过了什么?你在寻找什么样的平衡点?它需要多高效? –

+0

你的问题真的不能给任何人足够的信息给你一个答案。你有什么尝试?你在用什么语言?这不会是一个家庭作业的问题,是吗?... – Floris

+1

@弗洛伊斯每当语言没有给出,我假设'语言不可知'算法' –

回答

4

假设由“平衡”,你的意思是“高度平衡”的AVL树感觉,你可以存储任意信息为每个节点,

  • 对于后序的每个节点,
    • 如果其中一个孩子不存在,则假设其各自的身高为0.
    • 如果两个孩子的身高相差超过一个,那么树就不平衡。
    • 否则,此节点的高度是两个孩子身高中较大的一个。
  • 如果达到了这一点,树就是平衡的。

一种方式进行后序遍历:在根

  • 开始
    • 如果此节点的左子存在,没有它的高度计算,请访问其左孩子旁边。
    • 否则,如果此节点的右侧子节点存在并且没有计算其高度,请访问其右侧的子节点。
    • 其他
      • 计算此节点的高度,可能返回早
      • 如果此节点是不是根,下次光临其父。
  • 如果达到了这一点,树就是平衡的。
+0

非常感谢准确的答案。是的,我的意思是身高平衡。我在哪里可以找到这个函数在C++中的实现? – user2000916

+0

@ user2000916你可以写一个。关于一些实现细节 - 您可以将深度存储为两个变量(访问/未访问,深度)或一个(如果访问深度,则为0,如果未访问) –

+0

基本上我需要此实现的迭代版本:http://www.geeksforgeeks .org/how-to-determine-if-a-binary-tree-is-balanced/ – user2000916