2014-02-26 95 views
-1

这是我迄今为止的代码,它只是查找整个树的深度。我如何找到只有一个节点值(项目)的深度?查找二叉树中特定节点的深度

Template <typename T> 
int stree<t>::nodeLevel(const T& item) 
{ 
int depthLeft, depthRight, depthval; 

if (t==NULL) 
depthval = -1; 

else 
{ 
depthLeft = depth(t->left); 
depthRight = depth(t->right); 
depthval = 1+(depthLeft > depthRight ? DepthLeft : depthRight); 
} 
return depthval; 
} 
+1

那么我会开始修复这个错字。否则,就像你为T实现'find'一样执行,但是计算递归级别而不是看你是否找到它。 – Xarn

+0

'if(t == NULL)depthval = 0;'如果树是空的,树的高度将是0而不是-1 ..... – HadeS

+0

那段代码不会编译。 'Template'? 'T'和't'?比较中使用模板类型的可能用途? –

回答

0

当您遍历树时,可以计算深度。如果您从深度为0或1的顶部(根节点)开始(取决于您对底座的真实定义),那么您将增加深度数,每次必须向下移动到左侧或右侧节点,并且每次移回到该特定节点父节点时递减。

+0

也许最好将当前深度作为参数传递,以便在找到该项目时返回。切断深度维护(只需在每个分支上调用'find(ptr,item,depth + 1)'),减少错误空间;-) – vonbrand