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树转换为极大树,也就是将其中比它节点大的树全部加和。

猜你喜欢

转载自blog.csdn.net/angela2016/article/details/82790676