“树的直径(有时称为宽度)是树中任意两个节点之间最长路径上的节点数”。二叉树的直径
下面的C++函数是否适用于所有情况下查找二叉树的直径?称为s=0
,和该二进制树
int helper(node *root,int &s){
int l = 0, r = 0;
if(root == NULL){
return 0;
}
l= helper(root->left,s); //height of left subtree.
r= helper(root->right,s); //height of right subtree.
int mx_single=max(l,r)+1;
int mx_top=max(mx_single,l+r+1);
s=max(s,mx_top);
return mx_single;
}
的root
=根返回到主后,ans
将s
。
如果1节点树的高度为0,那么我认为该max表达式中的第三项应该使用常数2而不是1 - 至少使用*“通常”意思是“直径”边缘。由于OP给出的“节点数量之间”的定义,目前还不清楚是否应该计算内部节点(在这种情况下1是正确的)还是所有节点(在这种情况下应该是3)。 –
@j_random_hacker,我澄清了公式中使用的假设和定义。对于它的价值,我更喜欢通过节点而不是边来计算树高,因为这对于零节点和单节点树会产生不同的高度。对于这个问题,这也是一个更方便的定义,并且与给定的直径定义一致。 –
@ John Bollinger您能否给我提供一个上述方法失败的测试用例? okk你可以按照层次顺序给它的节点值,如果没有孩子,那么简单地把它作为-1。 – sb15