1. 程式人生 > >513. 找樹左下角的值、508. 出現次數最多的子樹元素和(中等,樹)

513. 找樹左下角的值、508. 出現次數最多的子樹元素和(中等,樹)

給定一個二叉樹,在樹的最後一行找到最左邊的值。

示例 1:

輸入:

    2
   / \
  1   3

輸出:
1
class Solution(object):
    def findBottomLeftValue(self, root):
        """
        :type root: TreeNode
        :rtype: int
        """
        #層次遍歷,最後一層返回第一個數字
        node=[root]
        while node:
            s=[]
            l=len(node)
            for i in range(l):
                curr=node.pop(0)
                s.append(curr.val)
                if curr.left:
                    node.append(curr.left)
                if curr.right:
                    node.append(curr.right)
        return s[0]

執行用時: 48 ms, 在Find Bottom Left Tree Value的Python提交中擊敗了80.32%的使用者

 

給出二叉樹的根,找出出現次數最多的子樹元素和。一個結點的子樹元素和定義為以該結點為根的二叉樹上所有結點的元素之和(包括結點本身)。然後求出出現次數最多的子樹元素和。如果有多個元素出現的次數相同,返回所有出現次數最多的元素(不限順序)。

示例 1
輸入:

  5
 /  \
2   -3

返回 [2, -3, 4],所有的值均只出現一次,以任意順序返回所有值。

示例 2

# Definition for a binary tree node.
# class TreeNode(object):
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = None

class Solution(object):
    def findFrequentTreeSum(self, root):
        """
        :type root: TreeNode
        :rtype: List[int]
        """
        d={}
        if not root:
            return []
        def dummy(root):
            if not root:
                return 0
            else:
                s=root.val+dummy(root.left)+dummy(root.right)
                if s not in d:
                    d[s]=1
                else:
                    d[s]+=1
            return s            
        dummy(root)
        maxx=max(d.values())
        result=[i for i in d if d[i]==maxx]
        return result
        

執行用時: 52 ms, 在Most Frequent Subtree Sum的Python提交中擊敗了96.92%的使用者