如何检查Java中的二进制树是否完整

时间:2011-05-06 15:46:03

标签: java binary-tree complete

我在完成这项任务时遇到了很多麻烦。使用Wikipedia定义获取完整的二叉树:

  

完整的二叉树是一个二叉树,其中除了可能是最后一个级别之外,每个级别都被完全填充,并且所有节点都尽可能地离开

我需要一种检查这些条件的方法,但无论我尝试多少,我似乎无法想出任何东西。如果我将TreeNode tree输入传递给checkComplete方法,我怎样才能通过二叉树并检查它是否完整?任何人都可以帮助伪代码或解释这是如何可能的?这里还有另一个问题:How to determine whether a binary tree is complete?

这个有一个伪代码的答案,但我无法理解所有随机变量的来源或它们的意图或者为什么在最后3行的括号中有两个值。如果有人可以帮助其他代表我真的很感激。

感谢。

2 个答案:

答案 0 :(得分:2)

int CT()
{
  int lh=0, rh=0, sign=1;
  if (!root->left && !root->right) 
    return 1;
  if (!root->left && root->right) 
    return 0;

  lh = CT(root->left);
  rh = CT(root->right);

  if (lh == 0 || rh == 0) 
    return 0;
  if (lh < 0 && rh < 0) 
    return 0;
  if (lh < 0 || rh < 0) 
    sign = -1;
  if (|lh| == |rh| ) 
    return (|lh|+1)*sign;
  elseif (rh == lh-1) 
    return -(|lh|+1);
  else return 0;
}

if CT returns '0' - its not a complete tree.
'-' is used to check mismatch in height is encountered on one subtree only.

答案 1 :(得分:1)

从左到右遍历树。您需要存储或比较信息的几个关键点:

  • 当您点击第一个叶节点时。
  • 当您点击后续的叶节点时。
  • 当您点击与根目录距离不同的第一个叶节点时。

由于这是家庭作业,你可能应该从该提示中完成其余部分。