如何在二叉树中找到最小值和最大值

如何解决如何在二叉树中找到最小值和最大值

++编辑++

感谢大家,我花了很多时间来使代码最终生效。

这是完整的代码概述

class Node:
# Binary Roots: Left and Right,initiating data
def __init__(self,data):
    # Creating an object,Data,to be used for inputs
    self.data = data
    # The objects are defined as None,which creates an empty space for input
    self.left = None
    self.right = None

定义二叉树类:

BinaryTree类:

# Defining Roots as Nodes,initiating at the same time.
def __init__(self,rootdata):
    # Declaring roots as new nodes which uses root data
    self.root = Node(rootdata)

定义FindMax,它将在二叉树中找到最大值,然后返回最大值。

def FindMax(root):

# ???
if (root == None):
    return float('-inf')

# In this function,it will search for the maximum of three values,the roots,and maximums from left and right leaves.

# Initialization of 3 things: the maximum of root,and two maximums of left and right leaves
letsfind = root.data
lfound = FindMax(root.left)
rfound = FindMax(root.right)

# If a maximum is found on the left,new maximum is the value.
if(lfound > letsfind):
    letsfind = lfound

# If a maximum is found on the right,new maximum is the value.
if(rfound > letsfind):
    letsfind = rfound

# Return the maximum value found.
return letsfind

???

如果名称 =='主要':

# The Inputs of the Binary Tree and leaves.
# root (Top most),root.left (Left Leaf),root.right (Right Leaf)
root = Node(2)
root.left     = Node(7)  
root.right     = Node(5)  
root.left.right = Node(6)  
root.left.right.left= Node(1)  
root.left.right.right= Node(11)  
root.right.right= Node(9)  
root.right.right.left= Node(4)  

# Print the Maximum
print("The Maximum Value in the Binary Tree is: ",FindMax(root))
    

我知道这似乎很长,因此我深表歉意。 我考虑到函数'FindMax'必须在类之外,才能正常运行。

不过,if __name__ == '__main__':语句的目的是什么?

if (root == None): return float('-inf')的真正作用是什么?

非常感谢你们。我很感激! :)

解决方法

选项1

问题在这里

st = start.data
lis = start.left
ris = start.right

您实际上在st上调用数据节点时。其他的lisris仅被称为Nodes。您应该使用

进行更改
st = start.data
lis = (start.left).data
ris = (start.right).data

要从所有节点读取数据

选项2

您为节点类覆盖>

有趣,但不是新秀。如果您有兴趣,请开始阅读this

,
lis = FindMax(start.left) 
ris = FindMax(start.right) 

您忘记了调用递归搜索

,

这是正确的代码:

def findMax(start): 
      
    # Base case  
    if start is None:  
        return float('-inf') 

    st = start.data 
    lis = findMax(start.left)  
    ris = findMax(start.right)  
    
    if (lis > st): 
        st = lis  
    if (ris > st):  
        st = ris  
    
    return st

并立即致电findMax()


Tree=BinaryTree("1")
Tree.root.left=Node("2")
Tree.root.right=Node("3")
Tree.root.left.left=Node("4")
Tree.root.left.right=Node("5")
Tree.root.right.left=Node("6")
Tree.root.right.right=Node("7")
Tree.root.right.right.right=Node("8")
print("Maximum element is",findMax(start)) 
,

注意-我的回答有一些例外:

  • 它可能包含错误,因为OP没有提供BinaryTree类。
  • 不考虑任何逻辑问题。
  • 它专注于使OP的代码正常工作。

这是我发现的错误:

  • Python是一种需要适当缩进的语言。缩进对于代码正常运行至关重要。似乎您缩进代码的方式不正确。
  • 当您尝试在类内部调用函数时,您将需要通过实例(自身)或类本身(类方法)进行调用。 Explanation provided here.
  • 说明if __name__ == "__main__": here。因为我假设您的代码是一个模块(在一个Python文件中),所以它并不是真正需要的,但是在使用多个模块时很好。

根据我提到的观点,我已相应地更正了您的代码,如下所示:

# Any required imports goes here...
# import XXX


class BinaryTree:
    # OP did not provide code sample...


class Node:
    def __init__(self,data):

        # Creating a node
        self.data = data

        # Pointing either left or right,but it is empty in default
        self.left = None
        self.right = None

    def fmax(self,start):
        
        if start is None:
            return 0

        st = start.data

        lis = self.fmax(start.left)
        ris = self.fmax(start.right)

        if (lis > st):
            st = lis
        if (ris > st):
            st = ris

        return st


if __name__ == "__main__":

    Tree = BinaryTree("1")
    Tree.root.left = Node("2")
    Tree.root.right = Node("3")
    Tree.root.left.left = Node("4")
    Tree.root.left.right = Node("5")
    Tree.root.right.left = Node("6")
    Tree.root.right.right = Node("7")
    Tree.root.right.right.right = Node("8")

    print(Tree.fmax(Tree.root))

如果有人发现我的代码有任何错误,请随时对其进行编辑。我的想法是让OP正常工作,他可以​​从那里扩展。

,
def findMax(root): 
      
    if (root == None):  
        return float('-inf') 

    res = root.data 
    lres = findMax(root.left)  
    rres = findMax(root.right)  
    if (lres > res): 
        res = lres  
    if (rres > res):  
        res = rres  
    return res 
  
if __name__ == '__main__': 
    root = newNode(2)  
    root.left = newNode(7)  
    root.right = newNode(5)  
    root.left.right = newNode(6)  
    root.left.right.left = newNode(1)  
    root.left.right.right = newNode(11)  
    root.right.right = newNode(9)  
    root.right.right.left = newNode(4)  
  
    print("Maximum element is",findMax(root)) 

#Output

最大元素为11

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


使用本地python环境可以成功执行 import pandas as pd import matplotlib.pyplot as plt # 设置字体 plt.rcParams['font.sans-serif'] = ['SimHei'] # 能正确显示负号 p
错误1:Request method ‘DELETE‘ not supported 错误还原:controller层有一个接口,访问该接口时报错:Request method ‘DELETE‘ not supported 错误原因:没有接收到前端传入的参数,修改为如下 参考 错误2:cannot r
错误1:启动docker镜像时报错:Error response from daemon: driver failed programming external connectivity on endpoint quirky_allen 解决方法:重启docker -> systemctl r
错误1:private field ‘xxx‘ is never assigned 按Altʾnter快捷键,选择第2项 参考:https://blog.csdn.net/shi_hong_fei_hei/article/details/88814070 错误2:启动时报错,不能找到主启动类 #
报错如下,通过源不能下载,最后警告pip需升级版本 Requirement already satisfied: pip in c:\users\ychen\appdata\local\programs\python\python310\lib\site-packages (22.0.4) Coll
错误1:maven打包报错 错误还原:使用maven打包项目时报错如下 [ERROR] Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:3.2.0:resources (default-resources)
错误1:服务调用时报错 服务消费者模块assess通过openFeign调用服务提供者模块hires 如下为服务提供者模块hires的控制层接口 @RestController @RequestMapping("/hires") public class FeignControl
错误1:运行项目后报如下错误 解决方案 报错2:Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (default-compile) on project sb 解决方案:在pom.
参考 错误原因 过滤器或拦截器在生效时,redisTemplate还没有注入 解决方案:在注入容器时就生效 @Component //项目运行时就注入Spring容器 public class RedisBean { @Resource private RedisTemplate<String
使用vite构建项目报错 C:\Users\ychen\work>npm init @vitejs/app @vitejs/create-app is deprecated, use npm init vite instead C:\Users\ychen\AppData\Local\npm-
参考1 参考2 解决方案 # 点击安装源 协议选择 http:// 路径填写 mirrors.aliyun.com/centos/8.3.2011/BaseOS/x86_64/os URL类型 软件库URL 其他路径 # 版本 7 mirrors.aliyun.com/centos/7/os/x86
报错1 [root@slave1 data_mocker]# kafka-console-consumer.sh --bootstrap-server slave1:9092 --topic topic_db [2023-12-19 18:31:12,770] WARN [Consumer clie
错误1 # 重写数据 hive (edu)> insert overwrite table dwd_trade_cart_add_inc > select data.id, > data.user_id, > data.course_id, > date_format(
错误1 hive (edu)> insert into huanhuan values(1,'haoge'); Query ID = root_20240110071417_fe1517ad-3607-41f4-bdcf-d00b98ac443e Total jobs = 1
报错1:执行到如下就不执行了,没有显示Successfully registered new MBean. [root@slave1 bin]# /usr/local/software/flume-1.9.0/bin/flume-ng agent -n a1 -c /usr/local/softwa
虚拟及没有启动任何服务器查看jps会显示jps,如果没有显示任何东西 [root@slave2 ~]# jps 9647 Jps 解决方案 # 进入/tmp查看 [root@slave1 dfs]# cd /tmp [root@slave1 tmp]# ll 总用量 48 drwxr-xr-x. 2
报错1 hive> show databases; OK Failed with exception java.io.IOException:java.lang.RuntimeException: Error in configuring object Time taken: 0.474 se
报错1 [root@localhost ~]# vim -bash: vim: 未找到命令 安装vim yum -y install vim* # 查看是否安装成功 [root@hadoop01 hadoop]# rpm -qa |grep vim vim-X11-7.4.629-8.el7_9.x
修改hadoop配置 vi /usr/local/software/hadoop-2.9.2/etc/hadoop/yarn-site.xml # 添加如下 <configuration> <property> <name>yarn.nodemanager.res