1, 二叉搜索树中的是否存在二个数的和为某个数(653)
思路:借助外部空间,判断是否有二个数的和为固定的值,避免一直递归来求解。再最后求得那个地方,因为采用中序遍历,所以就是顺序排列,在搜索二个数和为某个值的情况,可以进行一部分优化。
class Solution(object):
def __init__(self):
self._list = []
def inOrder(self, root):
if root is None:
return
self.inOrder(root.left)
self._list.append(root.val)
self.inOrder(root.right)
def findTarget(self, root, k):
"""
:type root: TreeNode
:type k: int
:rtype: bool
"""
self.inOrder(root)
if len(self._list) == 0:
return False
else:
for i in range(len(self._list)-1):
if self._list[i+1::].count(k-self._list[i])>0:
return True
return False
可以优化的部分:
l, r = 0, len(array)-1
while l < r:
if array[l] + array[r] > k:
r -= 1
elif array[l] + array[r] < k:
l += 1
else:
return True
2,从字符串来构建一个树(606)
class Solution(object):
def tree2str(self, t):
"""
:type t: TreeNode
:rtype: str
"""
if t == None:
return ""
if t.left == None and t.right == None:
return str(t.val)
if t.left == None:
return str(t.val) + "()" + "(" + self.tree2str(t.right) + ")"
if t.right == None:
return str(t.val) + "(" + self.tree2str(t.left) + ")"
return str(t.val) + "(" + self.tree2str(t.left) + ")" + "(" + self.tree2str(t.right) + ")"
3,讲BST树转换为极大树,也就是将其中比它节点大的树全部加和。