二叉树的前中后遍历

本文详细介绍了二叉树的前序遍历,包括递归和迭代两种方法。递归方式中,首先访问根节点,然后分别遍历左子树和右子树。迭代方式利用栈进行操作,通过两个游标控制遍历过程,确保根-左-右的顺序。示例代码展示了具体实现。
摘要由CSDN通过智能技术生成

前序概念

前序遍历(又称先序遍历,即先序遍历根)

遍历顺序:根->左->右 2->1->3
在这里插入图片描述

遍历顺序: ABDEGJHCFIKL
在这里插入图片描述

二叉树前序遍历 递归

在这里插入图片描述
题目来源:leetcode
https://leetcode-cn.com/problems/binary-tree-preorder-traversal/


# 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: TreeNode) -> List[int]:
        return_list = []
        # 前序遍历函数
        def preorder(node):
            # 递归的结束条件,节点为空
            if node is None:
                return
            return_list.append(node.val)
            preorder(node.left)
            preorder(node.right)
            # 递归实现中,后序遍历调整上面三个位置即可
        preorder(root)
        return return_list

执行结果

二叉树前序遍历 迭代

# 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: TreeNode) -> List[int]:
        simple_stack = []
        if not root:
            return simple_stack
        # 用两个游标cursor1,2
        cursor1 = root
        while cursor1 is not None:
            cursor2 = cursor1.left
            if cursor2:
                while cursor2.right is not None and cursor2.right != cursor1:
                    cursor2 = cursor2.right
                if not cursor2.right:
                    simple_stack.append(cursor1.val)
                    cursor2.right = cursor1
                    cursor1 = cursor1.left
                    continue
                else:
                    cursor2.right = None
            else:
                simple_stack.append(cursor1.val)
            cursor1 = cursor1.right

        return simple_stack

相当与 用while语句控制一个一个遍历 根->左->右
一个游标用于保存根节点,另一个用于访问右子树,如此往复,完成遍历

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值