# 199 二叉树的右视图

# 题目链接

# 难度:中等

# 思路分析:

深度优先、广度优先

#

#

#

#

#

#

#

#

#

#

#

#

#

#

# 代码:

深度优先:

var rightSideView = function(root) {
  if (!root) return [];
  let res = []; // 结果
  let start = 0; // 树的深度 从0开始
  dfs(root, start, res);
  return res;
};
function dfs(root, step, res) {
  if (root) {
    if (step === res.length) {
      res.push(root.val); // 数组长度等于树的深度时 添加当前值 因为右侧先遍历 有右侧先添加右侧
    }
    dfs(root.right, step + 1, res);
    dfs(root.left, step + 1, res);
  }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

广度优先:

var rightSideView = function(root) {
  if (!root) return [];
  let queue = [root]; // 队列 把树顶加入队列
  let arr = []; // 用来存储每层最后个元素值
  while (queue.length > 0) {
    let len = queue.length; // 当前层的广度
    while (len) {
      let node = queue.shift(); // 依次取出当前层队列的元素 从左到右
      if (len === 1) arr.push(node.val); // 当是 当前一层的最后一个元素时,把值加入arr
      if (node.left) queue.push(node.left); // 先添加左侧的
      if (node.right) queue.push(node.right); // 最后添加右侧的 等到最后一个元素时即可添加右侧的值
      len--;
    }
  }
  return arr;
};
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

# 鼓励我一下:

觉得还不错的话,给我的项目点个star

# 点个Star支持我一下~

最后更新时间: 7/2/2020, 4:27:35 PM