当前位置:   article > 正文

二叉树中序遍历-递归法详解-数据结构与算法_中序遍历递归

中序遍历递归

首先看下中序遍历的代码:(左 跟 右)

其首先要接受一个根结点root作为参数 判断根节点是否为NULL 不为NULL则递归遍历左子树    

①我们把树根结点A传递给它 其左结点为B,右结点为C

②首先我们要检查root是否为NULL 其不为NULL   通过递归继续遍历左边的子树  

将左子树传递给递归函数 该层递归函数的root为B 其左子树为D 右子树为E  

③判断root是否为NULL root不为NULL   继续将该树的左子树向下递

该层递归函数的root为D 左右子树都为NULL 我们检查root是否为NULL root为D,不为NULL  

④继续递归遍历D的左子树 其左子树为NULL 所以该层递归函数的root为null 满足递归结束条件       执行return退出该层递归函数 ,则回到root为D的递归层 D的左子树已经遍历完毕 我们执行下一行语句print 该语句会输出该root的数据域(root.val),即访问到了D  

⑤按照顺序继续执行,接下来将使用递归遍历D的右子树 这里D的右子树为NULL 所以我们传入的递归参数也为NULL 检测到root为NULL,我们退出该层递归函数  

⑥回到调用层D,该层的所有语句都执行完毕了 我们继续回到调用它的函数   这层的root为B 继续执行后序语句 输出root的数据域,即访问B 

⑦执行下一条语句 递归访问它的右子树   将E传递给它 判断root是否为NULL root为E,不为NULL 

⑧递归调用E的左子树,左子树为NULL   判断root是否为NULL 为NULL 退出该层   执行下一行 输出E

⑨继续遍历E的右子树 右子树为NULL 直接退出该层递归函数,返回到了E的递归层  

⑩E这层也执行完毕了,返回到调用它的B层   B层也执行完了 返回到调用它的A层  

⑪在该层执行下一行代码 输出A   继续遍历A的右子树   A的右子树为C 其不为NULL 递归C的左子树F  

⑫F不为NULL 递归F的左子树 F的左子树为NULL 即传入的root为NULL 满足递归结束条件,返回到调用它的F层   输出F

⑬遍历F的右子树 F的右子树也为NULL 退出该层 到此F这层函数执行完毕,返回到调用F的递归层 C   输出C

⑭递归C的右子树G   判断该层递归的root是否为NULL 当前root为G,不为NULL  递归G的左子树 左子树为NULL 满足递归结束条件,返回到调用它的G 输出G

⑮递归G的右子树 右子树为NULL 满足递归结束条件,返回到调用它的G   G这层函数结束,返回上层到C

⑯C也运行完毕,返回上层到A   A也运行完毕  

到此该树递归结束,这样我们就得到了中序遍历序列

【D  B  E  A  F  C  G】

其他遍历顺序也类似的过程。

  1. //Java版本的中序递归遍历参考代码:
  2. class Solution {
  3. public List<Integer> inorderTraversal(TreeNode root) {
  4. //定义一个 整数型的集合,用于存放遍历的结果数组
  5. List<Integer> result = new ArrayList<>();
  6. inorder(root,result);
  7. return result;
  8. }
  9. //中序遍历
  10. public void inorder(TreeNode root,List<Integer> result){
  11. //递归终止条件
  12. if(root == null) return;
  13. inorder(root.left,result); //左
  14. result.add(root.val); //中
  15. inorder(root.right,result); //右
  16. }
  17. }
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Li_阴宅/article/detail/998496
推荐阅读
相关标签
  

闽ICP备14008679号