1. 程式人生 > >LeetCode 102 && 429 廣度優先遍歷

LeetCode 102 && 429 廣度優先遍歷

本文首發於公眾號「zone7」,關注獲取最新推文!

image

概述

  • 前言
  • 429 N 叉樹的層次遍歷 90.36%
  • 102 二叉樹的層次遍歷 99.76%
  • 後記

前言

不管經濟多不好,提高自身硬實力才是關鍵。最近我也開始刷題了,所以後面的文章會時不時出現 LeetCode 的題。希望我們一起提高,一起進步。

429 N 叉樹的層次遍歷 90.36%

給定一個 N 叉樹,返回其節點值的層序遍歷。 (即從左到右,逐層遍歷)。

例如,給定一個 3叉樹 :

返回其層序遍歷:

[
     [1],
     [3,2,4],
     [5,6]
]

說明:

  1. 樹的深度不會超過 1000
  2. 樹的節點總數不會超過 5000

思路

如果你有讀我前面的文章就知道,其實這個就是二叉樹層次遍歷的一個變形。

for child in current.children:    
                    que.append(child);

用這句程式碼替換了左右子樹加入佇列。

解答

# 執行效率:90.36%
"""
# Definition for a Node.
class Node(object):
    def __init__(self, val, children):
        self.val = val
        self.children = children
"""
class Solution(object):

    def levelOrder(self, root):
        """
        :type root: Node
        :rtype: List[List[int]]
        """
        if not root:
            return [];
        que = [];    
        res = [];    
        que.append(root);    
        while len(que):     
            l = len(que);
            sub = [];        
            for i in range(l):
                current = que.pop(0);    
                sub.append(current.val);
                for child in current.children:    
                    que.append(child);
            res.append(sub);    
        return res;

102 二叉樹的層次遍歷 99.76%

給定一個二叉樹,返回其按層次遍歷的節點值。 (即逐層地,從左到右訪問所有節點)。

例如:
給定二叉樹: [3,9,20,null,null,15,7],

    3
   / \
  9  20
    /  \
   15   7

返回其層次遍歷結果:

[
  [3],
  [9,20],
  [15,7]
]

思路

嗯,這就是上篇文章《python 實現二叉樹的深度&&廣度優先的遍歷》中的層次遍歷程式碼。不用解釋太多了。

解答

# 執行效率:99.76%
# 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 levelOrder(self, root):
        if not root:
            return []
        ret = []
        ret.append(root)
        ret2 = []
        while len(ret) != 0:
            temp = []
            length = len(ret)
            for index in range(length):
                tempValue = ret.pop(0)
                temp.append(tempValue.val)
                if tempValue.left is not None:
                    ret.append(tempValue.left)
                if tempValue.right is not None:
                    ret.append(tempValue.right)
            ret2.append(temp)
        return ret2

後記

今天的題就到這裡了,如果有什麼好刷題的建議可以留言或者後臺私信給我,我會分享給大家。