path = 0 # the lenght of the path
while self.right != None or self.left != None:
while self.right != None:
self = self.right
path = path +1
while self.left != None:
self = self.left
path = path +1
return path
这是我的示例代码,用于查找高度,定义为长度 从自身到叶子的节点数量最长的路径。叶节点的高度为1。
它不起作用。
答案 0 :(得分:20)
你所做的不是递归的,而是迭代的。 递归将是这样的:
def height(node):
if node is None:
return 0
else:
return max(height(node.left), height(node.right)) + 1
答案 1 :(得分:4)
mata给出了解决方案,但我建议您查看代码并了解它的作用:
while self.right != None:
self = self.right
path = path +1
这会怎么做?它会找到合适的孩子,然后找到合适的孩子,依此类推。因此,这只检查“最右边”叶子的一条路径。
左边的情况也是如此:
while self.left != None:
self = self.left
path = path +1
递归的想法是,对于每个子问题,您使用与所有其他子问题完全相同的配方来解决它。因此,如果您只将算法应用于子树或叶子,它仍然可以工作。
此外,递归定义会调用自身(虽然您可以使用循环实现此功能,但这超出了此范围)。
记住定义:
递归:参见递归的定义。
)
答案 2 :(得分:2)
def height(node):
if node is None:
return 0
else:
if node.left==None and node.right==None:
return max(height(node.left), height(node.right))+0
else:
return max(height(node.left), height(node.right))+1
如果您将每个增加的边缘视为高度。 通过hackerrank testcases
答案 3 :(得分:1)
def getHeight(self, root):
if root == None:
return -1
else:
return 1 + max( self.getHeight(root.left), self.getHeight(root.right) )
答案 4 :(得分:0)
这是Python ::
中的完整程序class Node :
def __init__(self, data):
self.data = data
self.left = None
self.right = None
def maxDepth(node):
if node is None :
return 0
else :
ldepth = maxDepth(node.left)
rdepth = maxDepth(node.right)
if (ldepth>rdepth):
return ldepth +1
else :
return rdepth +1
root = Node(1)
root.left = Node(2)
root.right = Node(3)
root.left.left = Node(4)
root.left.right = Node(5)
print "Height of tree is %d" %(maxDepth(root))
来源:here
答案 5 :(得分:0)
def height(self):
if self.root !=None:
return self._height(self.root,0)
else:
return 0
def _height(self,cur_node,cur_height):
if cur_node==None :
return cur_height
left_height = self._height(cur_node.left_child,cur_height+1)
right_height = self._height(cur_node.right_child,cur_height+1)
return max(left_height,right_height)