二叉树的4种简单遍历

class node:
    def __init__(self, l, r, v):
        self.left = l
        self.right = r
        self.val = v


node_7 = node(None, None, 7)
node_6 = node(None, None, 6)
node_5 = node(None, None, 5)
node_4 = node(None, None, 4)
node_3 = node(node_7, None, 3)
node_2 = node(node_5, node_6, 2)
node_1 = node(node_3, node_4, 1)
root = node(node_1, node_2, 'root')
''' 先中后遍历可以使用if not node:return null 这样就不用判断每个节点是否有左右孩子,因为是否左右孩子是null都压入栈 '''


# 1 先序遍历(根左右)
def first(root):
    if not root:
        return
    print(root.val, '->', end='')
    first(root.left)
    first(root.right)


# first(root)

# 2 中序遍历(左根右边)
def mid_seq(root):
    if root.left:
        mid_seq(root.left)
    print(root.val, '->', end='')
    if root.right:
        mid_seq(root.right)


# 3 后序遍历(左根右边)
def low_seq(root):
    if root.left:
        low_seq(root.left)
    if root.right:
        low_seq(root.right)
    print(root.val, '->', end='')


# low_seq(root)

# 4 层次遍历(队列)
def levels(root):
    queue = [root]
    while queue:
        if queue[0].left:
            queue.append(queue[0].left)
        if queue[0].right:
            queue.append(queue[0].right)
        print(queue.pop(0).val, '->', end='')


levels(root)

# 5 层次遍历(递归)
'''如果使用递归来写层次遍历,需要使用到一个数组,利用子节的下标是 2* i 和 2 * i+ 1 '''
list = [0,0,0,0,0,0,0,0]  # 这个数组可以动态生成长度,每次生成的长度是上一层的一倍 1,2,4,8...... 这也符合二叉树的定律
def levels_oder(root, list, i):
    if not root:
        return
    list[i-1] = root.val # 对应的下标格式化成对应的值   PS: insert插入若超过当前最大长度,会直接插入到最后一个元素中,无论你想插入到那里
    levels_oder(root.left, list, 2 * i)
    levels_oder(root.right, list, 2 * i + 1)

levels_oder(root, list, 1)
print(list)

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我明白了,以下是对应问题的回答: 1、二叉树的建立: 二叉树的建立可以采用递归或非递归方式。递归方式比较简单,对于每个节点,先创建一个节点,然后递归地创建它的左右子树。非递归方式一般使用栈,先将根节点入栈,然后循环执行以下操作:取出栈顶节点,读入它的左右子树(如果有的话),并将它们入栈。直到栈为空为止。 2、前序遍历二叉树: 前序遍历二叉树的顺序是:先访问根节点,然后访问左子树,最后访问右子树。实现方式可以采用递归或非递归方式。 3、中序遍历二叉树: 中序遍历二叉树的顺序是:先访问左子树,然后访问根节点,最后访问右子树。实现方式可以采用递归或非递归方式。 4、后序遍历二叉树: 后序遍历二叉树的顺序是:先访问左子树,然后访问右子树,最后访问根节点。实现方式可以采用递归或非递归方式。 5、按层序遍历二叉树: 按层序遍历二叉树的顺序是:从上到下、从左到右依次访问所有节点。实现方式可以采用队列,先将根节点入队,然后循环执行以下操作:取出队头节点,访问它的左右子节点(如果有的话),并将它们入队。直到队列为空为止。 6、求二叉树的深度: 求二叉树的深度可以采用递归方式。对于每个节点,它的深度等于左右子树深度的较大值再加1。如果节点为空,则深度为0。 7、求指定结点到根的路径: 求指定结点到根的路径可以采用递归方式。对于每个节点,如果它是目标节点或者目标节点的祖先节点,则将它加入路径中。如果节点为空,则返回空路径。 8、二叉树的销毁: 二叉树的销毁可以采用递归方式。对于每个节点,先销毁它的左右子树,然后再销毁它本身。如果节点为空,则直接返回。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值