【LeetCode】103. Binary Tree Zigzag Level Order Traversal 解題報告(Python)

題目分析:

給定一個二叉樹,返回其節點值的鋸齒形層次遍歷。(即先從左往右,再從右往左進行下一層遍歷,以此類推,層與層之間交替進行)。

例如:
給定二叉樹 [3,9,20,null,null,15,7],
在這裏插入圖片描述
返回鋸齒形層次遍歷如下:
[[3],[20,9],[15,7]]

解題思路:

  1. 這一題本質還是遍歷,使用遞歸進行遍歷。關鍵就是用一個變量去儲存當前層數res[level].append(root.val) 。
  2. 這一題與【LeetCode】102. Binary Tree Level Order Traversal基本一致,我們需要加一句關於奇偶層的判斷,如果是偶數層就正常向後添加,奇數層就把新元素插入到第一個。
            if level % 2 == 0:
                res[level].append(root.val)
            else:
                res[level].insert(0, root.val)

提交代碼:(遞歸,Runtime: 36 ms, faster than 97.44% )

class Solution:
    def preorder(self, root, level, res):
        if root:
            if len(res) < level + 1: res.append([])
            if level % 2 == 0:
                res[level].append(root.val)
            else:
                res[level].insert(0, root.val)
            self.preorder(root.left, level + 1, res)
            self.preorder(root.right, level + 1, res)

    def zigzagLevelOrder(self, root):
        res = []
        self.preorder(root, 0, res)
        return res

參考博客1參考博客2

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章