Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/312.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在二叉树中找到特定节点的深度?_Python_Recursion_Binary Tree - Fatal编程技术网

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

Python 如何在二叉树中找到特定节点的深度?,python,recursion,binary-tree,Python,Recursion,Binary Tree,我正试图找出这个问题的递归解决方案。主要是返回二叉树中节点所在的级别 def find_depth(tree, node): if node == None: return 0 else: return max(find_depth(tree.left)) #recursive solution here 将此类用于值: class Tree: def __init__(self, value, left=None,

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

def find_depth(tree, node):
    if node == None:
        return 0 
    else: 
        return max(find_depth(tree.left))
        #recursive solution here 
将此类用于值:

class Tree:
    def __init__(self, value, left=None, right=None):
        self.value = value
        self.left  = left
        self.right = right
示例:调用
find_depth(tree,7)
应返回树中7所在的级别。(二级)

3
/ \

7.1也许这就是你要找的

    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
call中提供有关深度的信息。它可能是这样的(假设
0
是一个哨兵,通知找不到节点):

def find_depth(树,节点,深度=1):
如果节点==无:
返回0
如果tree.value==节点:
返回深度
left\u depth=查找深度(tree.left,node,depth+1)
right\u depth=查找深度(tree.right,node,depth+1)
返回最大值(左深、右深)

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

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

  • 基本情况:如果输入
    为空,我们无法搜索,返回
    结果
  • 归纳,输入
    不是空的。如果
    tree.data
    与搜索值
    匹配,则返回当前深度
    d
  • 归纳,输入的
    不是空的,并且
    树。数据
    不匹配。返回
    tree.left的递归结果
    find.right的递归结果
  • def find(t=None,value=None,d=1):
    如果不是t:
    返回无#1
    elif t.value==值:
    返回d#2
    其他:
    返回find(t.left,value,d+1)或find(t.right,value,d+1)#3
    类树:
    定义初始化(self,value,左=无,右=无):
    自我价值=价值
    self.left=左
    self.right=right
    t=树\
    ( 3
    ,树(7,树(9),树(3))
    ,树(1)
    )
    打印(查找(t,7))#2
    打印(查找(t,99))#无
    
    您也可以在
    树中实现
    find
    方法

    def find(t=None,value=None,d=1):
    # ...
    类树
    定义初始化。。。
    def查找(自我,值)
    返回查找(self,value)
    打印(t.find(7))#2
    打印(t.find(99))#无
    
    如何在树中搜索节点?使用相同的逻辑。如果必须进一步深入节点,则返回1+recursivefunction(),如果找到节点,则返回0。您缺少向树中添加子节点的功能。在当前状态下,类树仅附加到第一个级别,因为您没有向子级添加任何级别。提示:深度录制可能还需要一个参数。当在子树中找不到节点时,应该返回一些特殊的内容。
        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