树(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]