python算法笔记——二叉树

程序猿,是灵长类动物的近亲,瞎长类动物。······ 每只程序猿自诞生起,就习惯在两棵树间跳来跳去,一棵是二叉树,另一棵也是二叉树。——摘自《暴走大事件》

二叉树的遍历

二叉树是一种非线性数据结构,遍历不像数组链表那样简单。之前我们讲到的数组链表都是线性数据结构,遍历比较简单。而二叉树遍历的时候需要把非线性关联的节点转化成一个线性的序列。不同的方式遍历二叉树,遍历出的序列顺序也是不同的。
宏观的角度来看,二叉树的遍历归结于两大类:深度优先遍历(前序遍历,中序遍历,后序遍历);广度优先遍历(层序遍历)。

深度优先遍历

前序遍历

前序遍历的输出顺序就是:根节点,左子树,右子树。

中序遍历

中序遍历的顺序是:左子树,根节点,右子树。

后序遍历

后序遍历的顺序是:左子树,右子树,根节点。

三种遍历的python代码:

class TreeNode:
    def __init__(self, data):
        self.data = data
        self.left = None
        self.right = None
def create_binary_tree(input_list=[]):
    """
    构建二叉树
    :param input_list: 输入数列
    """
    if input_list is None or len(input_list) == 0:
        return None
    data = input_list.pop(0)
    if data is None:
        return None
    node = TreeNode(data)
    node.left = create_binary_tree(input_list)
    node.right = create_binary_tree(input_list)
    return node
def pre_order_traversal(node):
    """
    前序遍历
    :param node: 二叉树节点
    """
    if node is None:
        return
    print(node.data)
    pre_order_traversal(node.left)
    pre_order_traversal(node.right)
    return node


def in_order_traversal(node):
    """
    中序遍历
    :param node: 二叉树节点
    """
    if node is None:
        return
    in_order_traversal(node.left)
    print(node.data)
    in_order_traversal(node.right)
    return node

def post_order_traversal(node):
    """
    后序遍历
    :param node: 二叉树节点
    """
    if node is None:
        return
    post_order_traversal(node.left)
    post_order_traversal(node.right)
    print(node.data)
    return node
my_input_list = list([3, 2, 9, None, None, 10, None, None, 8, None, 4])
root = create_binary_tree(my_input_list)
print("前序遍历:")
pre_order_traversal(root)
print("中序遍历:")
in_order_traversal(root)
print("后序遍历:")
post_order_traversal(root)
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小强同学

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值