class Solution:
def __init__(self):
self.prelist = list() def preTree(self,root:TreeNode):
if root != None:
self.preTree(root.left)
self.prelist.append(root.val)
self.preTree(root.right) def Construct(self,ary):
if len(ary)>0:
result = TreeNode(ary[0])
maxnum = ary[0]
maxindex = 0
for i in range(1,len(ary)):
if maxnum < ary[i]:
maxnum = ary[i]
maxindex = i
result.val = maxnum
result.left = self.Construct(ary[:maxindex])
result.right = self.Construct(ary[maxindex+1:])
return result
else:
return None def insertIntoMaxTree(self, root: TreeNode, val: int) -> TreeNode:
prelist2 = list()
self.preTree(root)
prelist2 = self.prelist[:]
prelist2.append(val)
result = TreeNode(prelist2[0])
maxnum = prelist2[0]
maxindex = 0
for i in range(1,len(prelist2)):
if maxnum < prelist2[i]:
maxnum = prelist2[i]
maxindex = i
result.val = maxnum
result.left = self.Construct(prelist2[:maxindex])
result.right = self.Construct(prelist2[maxindex+1:])
return result

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

 class Solution:
prelist = list()
def preTree(self,root:TreeNode):
if root != None:
self.preTree(root.left)
self.prelist.append(root.val)
self.preTree(root.right) def Construct(self,ary):
if len(ary)>0:
result = TreeNode(ary[0])
maxnum = ary[0]
maxindex = 0
for i in range(1,len(ary)):
if maxnum < ary[i]:
maxnum = ary[i]
maxindex = i
result.val = maxnum
result.left = self.Construct(ary[:maxindex])
result.right = self.Construct(ary[maxindex+1:])
return result
else:
return None def insertIntoMaxTree(self, root: TreeNode, val: int) -> TreeNode:
self.preTree(root)
prelist2 = self.prelist[:]
prelist2.append(val)
result = TreeNode(prelist2[0])
maxnum = prelist2[0]
maxindex = 0
for i in range(1,len(prelist2)):
if maxnum < prelist2[i]:
maxnum = prelist2[i]
maxindex = i
result.val = maxnum
result.left = self.Construct(prelist2[:maxindex])
result.right = self.Construct(prelist2[maxindex+1:]) return result

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

 class Solution:
def preTree(self,root:TreeNode,prelist):
if root != None:
self.preTree(root.left,prelist)
prelist.append(root.val)
self.preTree(root.right,prelist) def Construct(self,ary):
if len(ary)>0:
result = TreeNode(ary[0])
maxnum = ary[0]
maxindex = 0
for i in range(1,len(ary)):
if maxnum < ary[i]:
maxnum = ary[i]
maxindex = i
result.val = maxnum
result.left = self.Construct(ary[:maxindex])
result.right = self.Construct(ary[maxindex+1:])
return result
else:
return None def insertIntoMaxTree(self, root: TreeNode, val: int) -> TreeNode:
prelist2 = list()
self.preTree(root,prelist2)
prelist2.append(val)
result = TreeNode(prelist2[0])
maxnum = prelist2[0]
maxindex = 0
for i in range(1,len(prelist2)):
if maxnum < prelist2[i]:
maxnum = prelist2[i]
maxindex = i
result.val = maxnum
result.left = self.Construct(prelist2[:maxindex])
result.right = self.Construct(prelist2[maxindex+1:])
return result

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

leetcode998的更多相关文章

  1. [Swift]LeetCode998. 最大二叉树 II | Maximum Binary Tree II

    We are given the root node of a maximum tree: a tree where every node has a value greater than any o ...

随机推荐

  1. 将Json对象数组转化成JS Array数组

    private format(cards:any):Array<any>{ var result = new Array(); cards.forEach(element => { ...

  2. gcc编译工具生成动态库和静态库之一----介绍

     1.库的分类 根据链接时期的不同,库又有静态库和动态库之分. 静态库是在链接阶段被链接的(好像是废话,但事实就是这样),所以生成的可执行文件就不受库的影响了,即使库被删除了,程序依然可以成功运行. ...

  3. C#应用jstree实现无限级节点的方法

    下载jstree.js下载地址: http://jstree.com/ 当前下载版本: jsTree 3.3.1 第一步:下载完成后引用js+css <link href="~/plu ...

  4. 使用python操作word

    有两种方式: 使用win32com 使用docx 1.使用win32com扩展包 只对windows平台有效 代码: # coding=utf-8 import win32com from win32 ...

  5. P1258小车问题

    传送 很多人质疑它是二分,但其实它就是二分(我会说我不会解方程吗) 据说有很多人没看懂题干在说些什么,那就不要管题干了.拿样例算一遍,我们看看样例的答案是怎么算出来的. 这是样例.看到这个数,我们很懵 ...

  6. git基本的使用原理

    一:Git是什么? Git是目前世界上最先进的分布式版本控制系统. 二:SVN与Git的最主要的区别? SVN是集中式版本控制系统,版本库是集中放在中央服务器的,而干活的时候,用的都是自己的电脑,所以 ...

  7. tools、site

    notepad editer fiddler 一个http协议调试代理工具,它能够记录并检查所有你的电脑和互联网之间的http通讯,设置断点,查看所有的"进出"Fiddler的数据 ...

  8. Java的Start和Runnable方法的区别

    两种方法的区别 1) start:用法:start方法来启动线程,真正实现了多线程运行,这时无需等待run方法体代码执行完毕而直接继续执行下面的代码.通过调用Thread类的start()方法来启动一 ...

  9. 20165312 C语言基础调查和JAVA学习展望

    C语言基础调查和JAVA学习展望 一.有关学习技能的经历 掌握一项技能,我认为最重要的是练习和认真程度. 我在上幼儿园的时候学过电子琴,上台表演过多次,但是三四年之后就半途而废了,后来小学毕业之后对钢 ...

  10. L1正则化

    正则化项本质上是一种先验信息,整个最优化问题从贝叶斯观点来看是一种贝叶斯最大后验估计,其中正则化项对应后验估计中的先验信息,损失函数对应后验估计中的似然函数,两者的乘积即对应贝叶斯最大后验估计的形式, ...