1. 程式人生 > >leetcode題目:樹(一)

leetcode題目:樹(一)

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樹轉換為極大樹,也就是將其中比它節點大的樹全部加和。