繁体   English   中英

如何找到二叉树中特定节点的深度?

[英]How can I find the depth of a specific node inside a binary tree?

我正在尝试找出解决此问题的递归解决方案。 主要是返回节点所在的二叉树中的级别。

def find_depth(tree, node):
    if node == None:
        return 0 
    else: 
        return max(find_depth(tree.left))
        #recursive solution here 

使用此 class 作为值:

class Tree:
    def __init__(self, value, left=None, right=None):
        self.value = value
        self.left  = left
        self.right = right

示例:调用find_depth(tree, 7)应该返回 7 在树中的级别。 (2级)

   3
  / \
  7  1  <------ return that 7 is at level 2
 / \  
 9 3   

也许这就是你要找的

    def find_depth(tree, node):
        if node is None or tree is None:
            return 0

        if tree == node:
            return 1

        left = find_depth(tree.left, node)
        if left != 0:
            return 1 + left
        right = find_depth(tree.right, node)
        if right != 0:
            return 1 + right

        return 0

您需要在find_depth调用中提供有关深度的信息。 它可能看起来像这样(假设0是通知未找到节点的哨兵):

def find_depth(tree, node, depth=1):
    if node == None:
        return 0

    if tree.value == node:
        return depth

    left_depth = find_depth(tree.left, node, depth+1)
    right_depth = find_depth(tree.right, node, depth+1)
    return max(left_depth, right_depth)

然后你用两个参数调用它: x = find_depth(tree, 7)

递归是一种函数式遗产,因此将其与函数式风格一起使用会产生最佳结果 -

  1. 基本情况:如果输入tree为空,我们无法搜索,返回None结果
  2. 归纳,输入tree为空。 如果tree.data与搜索value匹配,则返回当前深度, d
  3. 归纳,输入tree不为空且tree.data匹配。 返回find.right的递归结果或tree.left的递归结果
def find (t = None, value = None, d = 1):
  if not t:
    return None              # 1
  elif t.value == value:
    return d                 # 2
  else:
    return find(t.left, value, d + 1) or find(t.right, value, d + 1) # 3

class tree:
  def __init__(self, value, left = None, right = None):
    self.value = value
    self.left = left
    self.right = right

t = tree \
  ( 3
  , tree(7, tree(9), tree(3))
  , tree(1)
  )

print(find(t, 7)) # 2
print(find(t, 99)) # None

您也可以在tree class 中实现find方法

def find (t = None, value = None, d = 1):
  # ...

class tree
  def __init__ #...

  def find(self, value)
    return find(self, value)

print(t.find(7)) # 2
print(t.find(99)) # None

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM