1. 程式人生 > >leetcode算法: Average of Levels in Binary Tree

leetcode算法: Average of Levels in Binary Tree

變量 2.4 size def pla etc xpl 二維數組 level

Given a non-empty binary tree, return the average value of the nodes on each level in the form of an array.

Example 1:
Input:
3
/ \
9 20
/ \
15 7
Output: [3, 14.5, 11]
Explanation:
The average value of nodes on level 0 is 3, on level 1 is 14.5, and on level 2 is 11. Hence return [3, 14.5, 11].

Note:
The range of node‘s value is in the range of 32-bit signed integer.



這道題描述的是:
給我們一顆完全二叉樹,我們求出二叉樹每層的節點平均值

我的思想:
對二叉樹進行廣度遍歷,用一個二維數組存下每一層的所有節點
再對每一層所有節點進行求平均數


偽代碼:
python中數組是動態的
用一個levels列表,裏面每一個元素都是一個列表,列表裏存著每層的所有節點
廣度遍歷的時候,動態生成下一個元素和下一層列表

1 levels = [[root] ] 根自己是第一層,levels裏面
2 對levels 一個一個拿出裏面的列表用level表示

(如果取出來的是空列表,說明到最後一層了,跳出循環)
2.1 當前列表level為一層,裏面存著所有當前層元素
2.2 為levels追加一個空列表[] 用於存儲下一層
2.3 一個一個取出level裏面的元素node
如果 node有left,node.left追加到下一層列表
如果 node有right,node.right追加到下一層列表
2.4 計算當前層所有節點的平均值,追加大結果列表res



我的python代碼:
 1 # Definition for a binary tree node.
 2 # class TreeNode(object):
3 # def __init__(self, x): 4 # self.val = x 5 # self.left = None 6 # self.right = None 7 8 class Solution(object): 9 def averageOfLevels(self, root): 10 """ 11 :type root: TreeNode 12 :rtype: List[float] 13 """ 14 levels = [[root]] #將要進行廣度遍歷,每一層新開一個列表,每個列表存著每層的節點 15 res = [ ] #用於存儲每層的平均數 16 i = 0 17 while i < len(levels) and levels[i] != []: 18 level = levels[i] 19 j = 0 20 temp = 0 # 臨時變量用於存儲當前層的節點值加和 21 levels.append([]) #開啟新的一層 22 while j < len(level): 23 node = level[j] 24 if node.left is not None: 25 levels[i+1].append(node.left) 26 if node.right is not None: 27 levels[i+1].append(node.right) 28 temp+=node.val 29 j += 1 30 res.append(temp/j) 31 i += 1 32 return res




leetcode算法: Average of Levels in Binary Tree