leetcode998
Posted AsenYang
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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种写法最为稳妥。
以上是关于leetcode998的主要内容,如果未能解决你的问题,请参考以下文章
LeetCode 1470. 重新排列数组 / 654. 最大二叉树 / 998. 最大二叉树 II