「算法基础」之二叉树的遍历和搜索

🌲🌲🌲 前言

    在二叉树相关的算法中,对于二叉树的搜索和遍历是绕不开的话题「绕开了当我没说😬」。如果你对二叉树的搜索、遍历还没有掌握的很清楚,那么咱就一起来康康。内容包括『二叉树的前序、中序、后序遍历的递归和迭代,以及深度优先搜索、广度优先搜索』 ,如果这几种都掌握了,也希望能看看有什么不对的地方,本算法菜鸟不胜感激。💐
学习

二叉树遍历

    二叉树的遍历包括但是不限于前序、中序、后序、层序、垂序等遍历方式,都是将二叉树所有的节点都访问一遍,然后按照不同的顺序输出节点的值。这里只说一下对前中后序以及层序遍历的想法,对别的方式有兴趣的可以自行搜索哦!🤡

📋 概念总结

  • 前序遍历: 从二叉树的根节点出发,当第一次到达节点时就输出节点数据,按照先向左再向右的方向访问。
  • 中序遍历: 从二叉树的根节点出发,当第二次到达节点时就输出节点数据,按照先向左再向右的方向访问。
  • 后序遍历: 从二叉树的根节点出发,当第三次到达节点时就输出节点数据,按照先向左再向右的方向访问。
  • 层次遍历: 从二叉树的根节点出发,按照树的层次自上而下的遍历二叉树。

    Tipes: 不管哪种遍历方式,都是从二叉树的「根节点」开始的,不同的遍历方式是在不同的时间点输出节点的内容。

    我自爆第一次学习遍历的时候这概念看好多遍硬是看不懂😂。

    首先不管哪种遍历方式,每个节点都会被访问到。如果把遍历位置比做指针的话,那么指针在每个节点都有三次不同时机的驻留

  1. 在遍历他的左子树之前;
  2. 在递归完他的左子树之后,递归他的右子树之前;
  3. 在递归他的右子树之后;
        那么我们对比上面的概念,正好每一次驻留都对应我们所说的前序、中序、后序遍历。
  • 前序遍历 --> 根在前,从左往右,一棵树的根永远在左子树前面,左子树在右子树前面「根、左、右」;
  • 中序遍历 --> 根在中,从左往右,一棵树的左子树永远在根前面,根永远在右子树前面 「左、根、右」;
  • 后序遍历 --> 根在后,从左往后,一个数的左子树永远在右子树前面,右子树在根前面 「左、右、根」;

🔖 递归模版

    上面的概念看得干巴巴的,下面来写点代码润润,先从最简单的递归开始。🐋

🔵 前序遍历递归模版

     前序遍历就是根节点在左子树前面,左子树在右子树前面,所以我们在遍历的时候要先把根节点保存,然后再保存左子树,最后保存右子树。

前序遍历

验证一下输出结果:「借用一下力扣的编辑器,哈啊哈😄」

前序遍历

总结一下模版:

//「根、左、右」
arr = []
recursive (root) {
   
    if(!root) return;
    arr.push(root.val); // 根节点在最前面
    recursive(root.left); // 然后是左子树
    recursive(root.right); // 最后是右子树
}
🔴 中序遍历递归模版

     中序遍历就是左子树在根节点前面,根节点在右子树前面,所以先遍历所有的左子树再根节点,最后是右子树。
中序遍历

验证一下输出结果:
中序遍历

总结一下模版:

//「左、根、右」
arr = []
recursive (root) {
   
    if(!root) return;
    recursive(root.left); // 先遍历所有的左子树
    arr.push(root.val); // 到尽头没有左子树,当前节点为根节点
    recursive(root.right); // 最后遍历所有右子树「还是先找左节点」
}
🟡 后序遍历递归模版

     后序遍历就是左子树在左子树前面,右子树在根节点前面,所以先遍历所有的左子树再遍历右子树,最后是根节点。

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值