1.二叉树树的层次遍历

当对二叉树进行层次遍历的时候,如何才能对不同层次的节点做隔离,主要有三个办法:

方法一:数组长度做隔离

获取当前的队列的长度length,一次只遍历length个节点,后续加入的元素在下一次循环遍历

queue =  [node]  // 新建一个队列,并将根节点放入队列
while queue.lengh != 0
    length = queue.length //  获取当前队列的长度
    while length > 0        // 只弹出length 个节点
        item = queue.shift // 弹出队列的头部元素
        do_something(item)    //  操作该节点:比如存入一个数组或者打印
        queue.push(item.left)  if item.left  // 将左子节点存入队列
        queue.push(item.right) if item.right  // 将右子节点存入队列
        length--

方法二:使用分隔符

在不同层次的节点之间加入一个分隔符,遍历发现分隔符的时候,停止当前遍历

queue = [node]     // 新建一个队列,并将根节点放入到队列
while queue.lengh != 0
    queue.push "$"    // 将分割符放入队列
    while(true)           // 做一个无限循环
           item = queue.shift   // 弹出队列的头部元素
           break if item == '$'   // 如果当前的节点等于分隔符,说明该层已经遍历到了最右边
           do_something(item)  //操作该节点
           queue.push(item.left)  if item.left // 将左子节点存入队列
           queue.push(item.right)  if item.right // 将右子节点存入队列

方法三:使用深度优先搜索

用一个level字段来保存深度,在深度优先遍历的时候,判断一下当前结点的深度即可
ans = []  // 用一个数组来保存值
level = 0 // 根节点的level 是0
visit(node,ans,level)


def visit(node,ans,level):
    return if node is null  // 如果节点为空,则返回
    //逻辑处理部分
    if ans.lengh > level   //说明之前访问过该层的节点
         ans.[level].push node.val
    else                   //说明之前level没有访问过
         ans.[level] = [node.val]
    visit (node.left, level + 1,ans)
    visit (node.right, level + 1,ans)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1. 二叉树的递归遍历二叉树的递归遍历是指通过递归方法遍历二叉树的各个节点,按照某种次序访问每个节点。常见的二叉树遍历方式有前序遍历、中序遍历和后序遍历。 2. 二叉树的非递归遍历二叉树的非递归遍历是指通过循环等非递归方法遍历二叉树的各个节点,按照某种次序访问每个节点。非递归遍历需要借助栈来实现,常见的二叉树遍历方式有前序遍历、中序遍历和后序遍历。 3. 二叉树层次遍历二叉树层次遍历是指按照从上到下、从左到顺序遍历每一层节点。常用的方法是使用队列来实现,首先将根节点入队列,然后依次出队列,并将其左子节点入队列,直到队列为空。 4. 输出二叉树上所有叶节点: 二叉树上的叶节点是指没有子节点的节点。可以通过递归方式,对每个节点进行判断,如果该节点没有左子节点,则将该节点输出。 5. 求二叉树的高度: 二叉树的高度是指从根节点到叶节点最长路径上经过的边数。可以通过递归方式求解,从左中选取较大的一个加上根节点即可。 6. 二叉树层序生成算法二叉树层序生成算法是指按照从上到下、从左到顺序依次生成每个节点。可以使用队列来实现,首先将根节点入队列,然后依次出队列,并根据当前节点生成其左子节点,将其入队列,直到生成完所有节点。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值