算法 - 二叉树递归遍历

172 阅读1分钟

一、遍历方式

按照顺序规则

1.先序遍历 2.中序遍历 3.后序遍历 4.层序遍历

按照实现方式

1.递归遍历 (先、中、后序)

2.迭代遍历(层次)

递归思想

1.确定边界 (递归停止下来的条件,return) 2.递归式调用

二、算法

准备一颗树结构

const root = {
    val: 1,
    left: {
        val: 2,
        left: {
            val: 3
        },
        right: {
            val: 4
        }
     },
     right: {
         val: 5,
         left: {
             val: 6
          },
         right: {
             val: 7
         }
      }
 }

先序遍历

遍历方式: 根 -> 左 -> 右

那么应该有的结果应是是: 1 2 3 4 5 6 7

实现

function preOrder(root) {
    if (root === undefined) return   // 如果没有后续结点,那么是undefined
    
    console.log(root.val)
    
    preorder(root.left)
    
    preorder(root.right)
    
}

中序遍历

遍历方式: 左 -> 根 -> 右

那么应该有的结果应是是: 3 2 4 1 6 5 7

实现

function inOrder(root) {
    if (root === undefined) return   // 如果没有后续结点,那么是undefined
    
    inOrder(root.left)
    
    console.log(root.val)
    
    inOrder(root.right)
    
}

后序遍历

遍历方式: 左 -> 右 -> 根

那么应该有的结果应是是: 3 4 2 6 7 5 1

实现

function postOrder(root) {
    if (root === undefined) return   // 如果没有后续结点,那么是undefined
    
    postOrder(root.left)
    
    postOrder(root.right)
    
    console.log(root.val)
    
}

三、总结

1.函数命名暂且用preOrder inOrder postOrder

2.先序、中序、后序考察的是递归遍历,取决于根结点的遍历时间,递归终止条件为root结点为undefined