二叉樹的層次遍歷

遞歸法:每次先取當前節點值,然後判斷當前層是否有rasult的list,接着遞歸左右節點:

# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = None

class Solution:
    def levelOrder(self, root: TreeNode) -> List[List[int]]:
        result = []
        level = 1
        self.levelOrderFunc(root, result, level)
        return result
    
    def levelOrderFunc(self, root, result, level):
        if root is None:
            return
        else:
            if len(result) < level:
                result.append([root.val])
            else:
                result[level - 1].append(root.val)
            self.levelOrderFunc(root.left, result, level + 1)
            self.levelOrderFunc(root.right, result, level + 1)

迭代方法:(仍就採用前面遍歷時用的方法,詳見:二叉樹的遍歷

class Solution:
    def levelOrder(self, root: TreeNode) -> List[List[int]]:
        white = 1
        gray = 0
        level = 1
        
        stack = [(white, root, level), ]
        result = []
        
        while stack:
            color, root, level = stack.pop()
            if root is None:
                continue
            if color:
                stack.append((white, root.right, level + 1))
                stack.append((white, root.left, level + 1))
                stack.append((gray, root, level))
            else:
                if len(result) < level:
                    result.append([root.val])
                else:
                    result[level - 1].append(root.val)
        return result

 

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