树(6)-----DFS

1、二叉树的反向层次遍历

def levelOrderBottom1(self, root):
    res = []
    self.dfs(root, 0, res)
    return res

def dfs(self, root, level, res):
    if root:
        if len(res) < level + 1:
            res.insert(0, [])
        res[-(level+1)].append(root.val)
        self.dfs(root.left, level+1, res)
        self.dfs(root.right, level+1, res)

2、最长同值路径

给定一个二叉树,找到最长的路径,这个路径中的每个节点具有相同值。 这条路径可以经过也可以不经过根节点。

注意:两个节点之间的路径长度由它们之间的边数表示。

示例 1:

输入:

              5
             / \
            4   5
           / \   \
          1   1   5

输出:

2
class Solution_recursive:
    def longestUnivaluePath(self, root):
        """
        :type root: TreeNode
        :rtype: int
        """
        self.count = 0
        self.dfs(root)
        return self.count

    def dfs(self, root):
        if root is None:
            return 0
        left = self.dfs(root.left)
        right = self.dfs(root.right)

        left = left + 1 if root.left and root.left.val == root.val else 0
        right = right + 1 if root.right and root.right.val == root.val else 0

        self.count = max(self.count, left + right)
        return max(left, right)

 3、找到出现最多值的节点。【递归+Counter字典】

from collections import Counter
class Solution(object):
    def findMode(self, root):
        """
        :type root: TreeNode
        :rtype: List[int]
        """
        if not root:
            return []
        countDic=Counter()
        def helper(root):           
            if root:
                countDic[root.val]+=1
                helper(root.left)
                helper(root.right)
                
        helper(root)
        maxMode=max(countDic.values())
        return [k for k,v in countDic.items() if v==maxMode]

 



posted on 2018-06-05 10:05  吱吱了了  阅读(212)  评论(0编辑  收藏  举报

导航