美文网首页
二叉树遍历

二叉树遍历

作者: 路在脚下了 | 来源:发表于2020-09-09 15:11 被阅读0次

前中后序遍历的区别:访问根节点的先后顺序。
递归遍历注意点:注意递归结束的条件(一般是判断节点==nil).

DFS:深度优先策略

①注意空节点(为根节点或者叶子节点的下一层)
②注意叶子节点的处理
③处理当前层需要处理的问题
④递归左右子树
⑤有需要返回的return

BFS:广度优先策略

①注意根节点
②初始化第一层节点,加入队列queue
③循环队列(!queue.isempty),处理队列节点,并判断左右子节点是否为空,然后添加下一层节点到队列,删除当前处理的节

自顶向下

①传入当前层节点与当前层状态(变量)
②空节点问题
③叶子节点问题
④下探入下一层的左右子树,返回①

func pathSum(_ root: Node?, _ sum: Int) -> Bool {
    if root == nil { return false }
    if root?.left == nil && root?.right == nil {
        return root?.val == sum
    }
    return pathSum(root?.left, sum - root!.val) || path(root?.right, sum - root!.val)
}

var ans = 0
// 每下探一层,深度加一
func maximun_d(_ node: TreeNode?, _ depth: Int) {
  // 空节点,没必要继续下探
  if node == nil { return }
    // 下探到最底层,重新比较最大深度
    if (node!.left == nil) && (node!.right == nil) {
        ans = max(ans, depth)
    }
    maximun_d(node?.left, depth + 1)
    maximun_d(node?.right, depth + 1)
}
maximun_d(root, 1)
return ans

自底向上

①空节点问题
②左右子树递归探底
③计算初始问题,并返回结果

// 最大深度
func max_depth(_ root: Node?) -> Int {
    // 空节点,(可能是空根节点或者叶子节点的下一层),返回0
    if root == nil { return 0 }
    var left_depth = 0, right_depth = 0, max_depth = 0
    left_depth = maxi_depth(root?.left)
    right_depth = maxi_depth(root?.right)
    // 每次递归返回一层,深度加1
    max_depth = max(left_depth, right_depth) + 1
    return max_depth
    // 或者
    if root == nil {  return 0  }
    return max(maxDepth(root?.left), maxDepth(root?.right)) + 1
}

相关文章

  • 二叉树 基础操作

    二叉树的使用 二叉树结构 先序创建二叉树 DFS 先序遍历二叉树 中序遍历二叉树 后序遍历二叉树 BFS 层次遍历...

  • 关于二叉树的算法题

    前序遍历中序遍历后序遍历判断是否是平衡二叉树判断是否是对称二叉树判断二叉树高度按照层遍历二叉树判断二叉树宽度

  • 二叉树遍历

    二叉树 二叉树的存储结构 前序遍历 中序遍历 后序遍历 遍历代码 反转二叉树 深入学习二叉树 二叉树-你必须要懂!...

  • 二叉树操作

    树节点 逐行顺序解析二叉树 前序遍历二叉树 中序遍历二叉树 后序遍历二叉树 删除指定数值的节点 前序遍历顺序存储的...

  • 数据结构与算法之二叉树遍历(七)

    目录 前序遍历中序遍历后序遍历层序遍历遍历方式的选择条件根据遍历结果重构二叉树翻转二叉树计算二叉树的高度判断一棵树...

  • 二叉树三种遍历Swift代码实现

    二叉树的三种遍历 二叉树 前序遍历 中序遍历 后序遍历 另外 不得不说,得到二叉树的前序遍历和中序遍历的结果或者后...

  • 二叉树的遍历

    二叉树的遍历 二叉树遍历 分为前序遍历、中序遍历和后序遍历。 前序遍历 (DLR) 先访问根节点,然后前序遍历左子...

  • 前端二叉树

    (一)构造二叉树 (二)中序遍历 (三)前序遍历 前序遍历可以复制二叉树,效率比重新构造二叉树高 (四)后序遍历 ...

  • 数据结构:树的实现和遍历(c++)

    (一)二叉树的遍历——递归实现 二叉树常见的遍历方式分为前序遍历、中序遍历和后序遍历。 1 前序遍历 前序遍历也叫...

  • leetcode 144 145 94

    二叉树遍历 前序遍历 中序遍历 后序遍历

网友评论

      本文标题:二叉树遍历

      本文链接:https://www.haomeiwen.com/subject/sqdeektx.html