用Python实现二叉树的广度优先遍历(BFS:Breadth-First-Search)和深度优先遍历(DFS:Depth-First-Search)先序遍历,中序遍历,后序遍历

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


class Solution:
    # 深度优先遍历:先序,中序,后序
    def deepOrder(self, root: TreeNode):
        if not root:
            return []
        # res为指定遍历方式的结果
        # stack栈,利用栈FILO的特点,根据先中后排序规则"倒着"压入栈(出栈的顺序即为我们要的结果)
        res, stack = [], [root]  # 传入根节点
        while stack:
            # 出栈
            node = stack.pop()
            # 如果当前node的class为TreeNode,就表示还有子节点
            if isinstance(node, TreeNode):
                # 先序
                stack.extend([node.right, node.left, node.val])
                # 中序
                # stack.extend([node.right,node.val,node.left])
                # 后序
                # stack.extend([node.val,node.right,node.left])

            # 否则如果是int类(当树是由字符串组成时,就是str类),表示无子节点,就可以加入结果list里了
            elif isinstance(node, int):
            # elif isinstance(node,str) or isinstance(node,int):
                res.append(node)
        return res

    # 广度优先:层序遍历
    def lvOrder(self,root: TreeNode):
        # 队列:FIFO
        res, queue = [],[root]
        while queue:
            node = queue.pop(0)
            res.append(node.val)
            if node.left:
                queue.append(node.left)
            if node.right:
                queue.append(node.right)
        return res

有不懂的欢迎留言,我会尽全力解答,大家一起学习,一起进步

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值