代码随想录算法训练营第十四天| 144. 二叉树的前序遍历、94. 二叉树的中序遍历、145. 二叉树的后序遍历

代码随想录算法训练营第十四天| 144. 二叉树的前序遍历、94. 二叉树的中序遍历、145. 二叉树的后序遍历

题目

144.二叉树的前序遍历

给你二叉树的根节点 root ,返回它节点值的 前序 遍历。

# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
class Solution:
    def preorderTraversal(self, root: Optional[TreeNode]) -> List[int]:
        # 递归
        # if root is None:
        #     return []
        # left = self.preorderTraversal(root.left)
        # right = self.preorderTraversal(root.right)
        # return [root.val] + left + right

        # 非递归用栈来模拟
        # 根左右
        # 栈的特性就是先进后出,所以在根结点保存后,要先右结点进去
        if not root:
            return []
        stack = [root]
        # 存放结果
        res = []
        while stack:
            node = stack.pop()
            res.append(node.val)
            # 根左右,因此先放右再放左
            if node.right:
                stack.append(node.right)
            if node.left:
                stack.append(node.left)
        return res

题目

94.二叉树的中序遍历

给定一个二叉树的根节点 root ,返回 它的 中序 遍历

# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
class Solution:
    def inorderTraversal(self, root: Optional[TreeNode]) -> List[int]:
        # 递归
        # if root is None:
        #     return []
        # left = self.inorderTraversal(root.left)
        # right = self.inorderTraversal(root.right)
        # return left + [root.val] + right

        # 非递归
        if root is None:
            return []
        stack = []
        res = []
        cur = root
        while cur or stack:
            # 当前值不为空,就一直往下找最左下角,如果当前值为空就把它输出了,然后当前值到它的右下角 
            if cur:
                stack.append(cur)
                cur = cur.left
            else:
                cur = stack.pop()
                res.append(cur.val)
                cur = cur.right
        return res
            

题目

145.二叉树的后序遍历

给你一棵二叉树的根节点 root ,返回其节点值的 后序遍历

# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
class Solution:
    def postorderTraversal(self, root: Optional[TreeNode]) -> List[int]:
        # 递归
        # if root is None:
        #     return []
        # left = self.postorderTraversal(root.left)
        # right = self.postorderTraversal(root.right)
        # return left + right + [root.val]

        # 非递归
        # 前序遍历是根左右,后序遍历是左右根
        # 那我们直接遍历左右根的逆序根右左,然后再进行逆序输出
        if root is None:
            return []
        stack = [root]
        res = []
        while stack:
            node = stack.pop()
            res.append(node.val)
            if node.left:
                stack.append(node.left)
            if node.right:
                stack.append(node.right)
        return res[::-1]
            

你可能感兴趣的:(代码随想录,算法,leetcode,职场和发展)