算法-06-二叉树的遍历

本文详细介绍了二叉树的四种遍历方法:前序、中序、后序和层序遍历。针对每种遍历方式,不仅提供了递归的实现,还探讨了迭代实现的细节,特别是利用栈进行迭代遍历时的节点访问顺序和入栈策略。
摘要由CSDN通过智能技术生成

常用树定义

  • 多叉树:不限制每个结点的子节点数量的树型结构。

  • 二叉树:每个结点最多有两个子节点,上面的树型结构就是二叉树。左边的叫左子树,右边的叫右子树。

  • 满二叉树:除最后一层无任何子节点外,每一层上的所有结点都有两个子结点的二叉树。

  • 完全二叉树:叶子结点只存在在最后一层或倒数第二层。并且如果最下面一层节点不满,则所有的节点在左边的连续排列,空位都在右边。(理解为两个层级相差为1的满二叉树之间的树,空位都在右边)
    在这里插入图片描述

  • 平衡树:它是一 棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。平衡树有很多常用的使用方法,比如有红黑树、AVL等。

  • 二叉搜索树: 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值; 若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值; 它的左、右子树也分别为二叉排序树。

  • 红黑树:Red-Black Tree(R-B Tree)

  • AVL:加了平衡条件的二叉搜索树,因为平衡后深度更浅,那么搜索的性能更高了。

  • 哈夫曼树

二叉树遍历

DFS:深度优先,比如前中后序遍历,需要用到递归
BFS:广度优先,比如层次遍历,需要用到列表(栈或队列),迭代方式实现。

迭代方式需要借助栈,重点考虑入栈、出栈顺序

# 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

1 前序遍历

递归

def preorder(root):
    if not root:return # 处理节点为空
    # 操作root.val
    preorder(root.left)
    preorder(root.right)

class Solution:
    def preorderTraversal(self, root: TreeNode) -> List[int]:
        r = []
        if not root:return r

        def preorder(root,result):
            if not root:return
            result.append(root.val)
            preorder(root.left,result)
            preorder(root.right,result)

        preorder
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值