zoukankan      html  css  js  c++  java
  • leetcode998

     1 class Solution:
     2     def __init__(self):
     3         self.prelist = list()
     4 
     5     def preTree(self,root:TreeNode):
     6         if root != None:            
     7             self.preTree(root.left)
     8             self.prelist.append(root.val)
     9             self.preTree(root.right)
    10 
    11     def Construct(self,ary):
    12         if len(ary)>0:
    13             result = TreeNode(ary[0])
    14             maxnum = ary[0]
    15             maxindex = 0
    16             for i in range(1,len(ary)):
    17                 if maxnum < ary[i]:
    18                     maxnum = ary[i]
    19                     maxindex = i
    20             result.val = maxnum
    21             result.left = self.Construct(ary[:maxindex])
    22             result.right = self.Construct(ary[maxindex+1:])
    23             return result
    24         else:
    25             return None
    26 
    27 
    28 
    29     def insertIntoMaxTree(self, root: TreeNode, val: int) -> TreeNode:
    30         prelist2 = list()
    31         self.preTree(root)
    32         prelist2 = self.prelist[:]
    33         prelist2.append(val)
    34         result = TreeNode(prelist2[0])
    35         maxnum = prelist2[0]
    36         maxindex = 0
    37         for i in range(1,len(prelist2)):
    38             if maxnum < prelist2[i]:
    39                 maxnum = prelist2[i]
    40                 maxindex = i
    41         result.val = maxnum
    42         result.left = self.Construct(prelist2[:maxindex])
    43         result.right = self.Construct(prelist2[maxindex+1:])
    44         return result

    注意第3行,这里是用构造函数来初始化了一个“成员变量”,这样是可以正常工作的。但是如果使用“类变量”,如下面的第2行,在oj上就会报错。

     1 class Solution:
     2     prelist = list()
     3     def preTree(self,root:TreeNode):
     4         if root != None:            
     5             self.preTree(root.left)
     6             self.prelist.append(root.val)
     7             self.preTree(root.right)
     8 
     9     def Construct(self,ary):
    10         if len(ary)>0:
    11             result = TreeNode(ary[0])
    12             maxnum = ary[0]
    13             maxindex = 0
    14             for i in range(1,len(ary)):
    15                 if maxnum < ary[i]:
    16                     maxnum = ary[i]
    17                     maxindex = i
    18             result.val = maxnum
    19             result.left = self.Construct(ary[:maxindex])
    20             result.right = self.Construct(ary[maxindex+1:])
    21             return result
    22         else:
    23             return None
    24 
    25 
    26 
    27     def insertIntoMaxTree(self, root: TreeNode, val: int) -> TreeNode:
    28         self.preTree(root)
    29         prelist2 = self.prelist[:]
    30         prelist2.append(val)
    31         result = TreeNode(prelist2[0])
    32         maxnum = prelist2[0]
    33         maxindex = 0
    34         for i in range(1,len(prelist2)):
    35             if maxnum < prelist2[i]:
    36                 maxnum = prelist2[i]
    37                 maxindex = i
    38         result.val = maxnum
    39         result.left = self.Construct(prelist2[:maxindex])
    40         result.right = self.Construct(prelist2[maxindex+1:])
    41 
    42         return result

    为了解决这个问题,还可以使用一种方式,就是把结果集合传递到前序遍历的方法中,如下面第2行定义的方法,多了一个prelist参数,用于记录结果:

     1 class Solution:
     2     def preTree(self,root:TreeNode,prelist):
     3         if root != None:            
     4             self.preTree(root.left,prelist)
     5             prelist.append(root.val)
     6             self.preTree(root.right,prelist)
     7 
     8     def Construct(self,ary):
     9         if len(ary)>0:
    10             result = TreeNode(ary[0])
    11             maxnum = ary[0]
    12             maxindex = 0
    13             for i in range(1,len(ary)):
    14                 if maxnum < ary[i]:
    15                     maxnum = ary[i]
    16                     maxindex = i
    17             result.val = maxnum
    18             result.left = self.Construct(ary[:maxindex])
    19             result.right = self.Construct(ary[maxindex+1:])
    20             return result
    21         else:
    22             return None
    23 
    24 
    25 
    26     def insertIntoMaxTree(self, root: TreeNode, val: int) -> TreeNode:
    27         prelist2 = list()
    28         self.preTree(root,prelist2)
    29         prelist2.append(val)
    30         result = TreeNode(prelist2[0])
    31         maxnum = prelist2[0]
    32         maxindex = 0
    33         for i in range(1,len(prelist2)):
    34             if maxnum < prelist2[i]:
    35                 maxnum = prelist2[i]
    36                 maxindex = i
    37         result.val = maxnum
    38         result.left = self.Construct(prelist2[:maxindex])
    39         result.right = self.Construct(prelist2[maxindex+1:])
    40         return result

    总结:使用第1种写法最为稳妥。

  • 相关阅读:
    Visual C++ 2010 SP1 x86&x64
    MVC拦截
    自定义HTTP消息拦截
    转mysql半主从同步
    mysql主从搭建之诡异事件
    snapshot相关
    分布式系统唯一ID生成方案汇总
    mysql监控利器mysqlmtop部署安装
    mysql日常运维
    MySQL索引背后的数据结构及算法原理
  • 原文地址:https://www.cnblogs.com/asenyang/p/10471677.html
Copyright © 2011-2022 走看看