我在完成这项任务时遇到了很多麻烦。使用Wikipedia定义获取完整的二叉树:
完整的二叉树是一个二叉树,其中除了可能是最后一个级别之外,每个级别都被完全填充,并且所有节点都尽可能地离开
我需要一种检查这些条件的方法,但无论我尝试多少,我似乎无法想出任何东西。如果我将TreeNode tree
输入传递给checkComplete
方法,我怎样才能通过二叉树并检查它是否完整?任何人都可以帮助伪代码或解释这是如何可能的?这里还有另一个问题:How to determine whether a binary tree is complete?
这个有一个伪代码的答案,但我无法理解所有随机变量的来源或它们的意图或者为什么在最后3行的括号中有两个值。如果有人可以帮助其他代表我真的很感激。
感谢。
答案 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)
从左到右遍历树。您需要存储或比较信息的几个关键点:
由于这是家庭作业,你可能应该从该提示中完成其余部分。