leetcode題目:樹(一)
阿新 • • 發佈:2018-12-20
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樹轉換為極大樹,也就是將其中比它節點大的樹全部加和。