leedcode 二叉樹的層次遍歷

利用隊列保存每層的節點,利用一個輔助列表來保存當前層的所有孩子節點。噹噹前層遍歷結束之後,該層的所有孩子節點也會被全部保存再輔助列表中,然後將這個輔助列表賦值給隊列。依次循環直到遍歷完整棵樹。

# 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):
        """
        :type root: TreeNode
        :rtype: List[List[int]]
        """
        queue = []
        queue.append(root)
        res = []
        if root is None:
            return root
        while len(queue) > 0:
            len_q = len(queue)
            temp = []
            node_level = []
            for i in range(len_q):
                node = queue[i]
                temp.append(node.val)
                if node.left:
                    node_level.append(node.left)
                if node.right:
                    node_level.append(node.right)
            queue = node_level
            res.append(temp)
        return res 

二叉樹的前序遍歷

# 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 preorderTraversal(self, root):
        """
        :type root: TreeNode
        :rtype: List[int]
        """
        res = []
        pnodes = []
        pnodes.append(root)
        while len(pnodes) > 0:
            root = pnodes.pop()
            if not root:
                continue
            res.append(root.val)
            pnodes.append(root.right)
            pnodes.append(root.left)
        return res

二叉樹的中序遍歷

# 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 inorderTraversal(self, root):
        """
        :type root: TreeNode
        :rtype: List[int]
        """
        res = []
        pnodes = []
        while root or len(pnodes) > 0:
            while root:
                pnodes.append(root)
                root = root.left
            root = pnodes.pop()
            res.append(root.val)
            root = root.right
        return res

二叉樹的後序遍歷

# 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 postorderTraversal(self, root):
        """
        :type root: TreeNode
        :rtype: List[int]
        """
        res = []
        stack = []
        stack.append((root, False))
        while len(stack) > 0:
            root, visited = stack.pop()
            if not root:
                continue
            if visited:
                res.append(root.val)
            else:
                stack.append((root, True))
                stack.append((root.right, False))
                stack.append((root.left, False))
        return res

 

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