# 蛇形遍历

// 输入
const initTree = {
  value: 1,
  left: {
      value: 2,
      left: {
          value: 4,
          left: {
              value: 8
          },
          right: {
              value: 9
          }
      },
      right: {
          value: 5
      }
  },
  right: {
      value: 3,
      left: {
          value: 6
      },
      right: {
          value: 7,
          left: {
              value: 10
          }
      }
  }
}

// 输出
1
3 2
4 5 6 7
10 9 8
snake(initTree)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
function snake(tree) {
  const queue = []
  const AllLevel = []

  tree.level = 0
  queue.push(tree)

  while (queue.length) {
    const item = queue.shift()
    const itemLevel = item.level

    if (item.left) {
      item.left.level = itemLevel + 1
      queue.push(item.left)
    }
    if (item.right) {
      item.right.level = itemLevel + 1
      queue.push(item.right)
    }

    if (!AllLevel[itemLevel]) {
      AllLevel[itemLevel] = []
    }
    AllLevel[itemLevel].push(item.value)
  }

  AllLevel.forEach((level, idx) => {
    const newLevel = idx % 2 === 0 ? level : level.reverse()
    
    newLevel.forEach(item => {
      console.log(item)
    })
  })
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
最后更新时间: 8/5/2021, 8:23:45 PM