问题描述
如果下面二叉树中的元素是 22,那么它的高度就是 2。 我应该先找到二叉树的高度,然后从这个高度开始,当我向下一个节点时,递减它吗?
如果您有答案,请随意用伪代码或您想要的任何编程语言编写。谢谢。
解决方法
对树进行层序遍历,并保留一个变量来跟踪当前节点的深度。
- 树的高度将是最深节点的深度。
- 如果您找到要查找的节点,请将其存储在变量中
- 最后用树的高度减去节点的深度。
代码:
class BinaryTreeNode:
def __init__(self,val):
self.val = val
self.left = None
self.right = None
def setChildren(self,left,right):
self.left = left
self.right = right
def heightOfNode(root,searchValue):
queue,depth,maxDepth = [],None,0
if (root != None):
queue.append((root,1))
maxDepth = 1
while len(queue) > 0:
node,nodeDepth = queue.pop(0)
if (node.left != None):
queue.append((node.left,nodeDepth + 1))
if (node.right != None):
queue.append((node.right,nodeDepth + 1))
if (node.val == searchValue):
depth = nodeDepth
maxDepth = max(nodeDepth,maxDepth)
return maxDepth - depth
if __name__=='__main__':
node14 = BinaryTreeNode(14)
node22 = BinaryTreeNode(22)
node2 = BinaryTreeNode(2)
node1 = BinaryTreeNode(1)
node5 = BinaryTreeNode(5)
node20 = BinaryTreeNode(20)
node30 = BinaryTreeNode(30)
node4 = BinaryTreeNode(4)
node17 = BinaryTreeNode(17)
node50 = BinaryTreeNode(50)
node40 = BinaryTreeNode(40)
node14.setChildren(node2,node22)
node2.setChildren(node1,node5)
node22.setChildren(node20,node30)
node5.setChildren(node4,None)
node20.setChildren(node17,node50)
node30.setChildren(None,node40)
print(heightOfNode(node14,22))
输出:
2