我正在尝试查找给定的BST是否平衡。
所以我做了一个递归函数:叫做“ number_of_edge”
此函数以参数TreeNode *为根,然后从左侧和右侧计算到TreeNode直到树叶离开的节点数 然后从左侧减去节点数量,从右侧减去节点数量,以检查差异是否大于1,则表明树不平衡。
但是递归功能无法正确计算左右高度
输入:10 5 7 4 6 8 9
(输入时,第一个值是BST的根)
输出应该保持平衡,因为根的左高度等于2,右高度等于3,并且此处左右高度之差仅为1。
但是在我的代码中,它计算出左高度为2,右高度为零
代码
int number_of_edge(Tree mytree, TreeNode* root)
{
int leftheight = 0;
int rightheight = 0;
if (root->getleft() != NULL)
{
leftheight++;
leftheight += number_of_edge(mytree, root->getleft());
}
if (root->getright() != NULL)
{
rightheight++;
rightheight += number_of_edge(mytree, root->getright());
}
if (leftheight == rightheight)
return leftheight;
else if (leftheight > rightheight)
return leftheight;
else return rightheight;
}