【路飞】算法与数据结构-二叉树的右视图

103 阅读1分钟

不管全世界所有人怎么说,我都认为自己的感受才是正确的。无论别人怎么看,我绝不打乱自己的节奏。喜欢的事自然可以坚持,不喜欢的怎么也长久不了。

LeetCode:原题地址

题目要求

给定一个二叉树的 根节点 root,想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节点值。

示例 1:

tree.jpg

输入: [1,2,3,null,5,null,4]
输出: [1,3,4]

示例 2:

输入: [1,null,3]
输出: [1,3]

示例 3:

输入: []
输出: []

提示:

  • 二叉树的节点个数的范围是 [0,100]
  • -100 <= Node.val <= 100

思路

典型广度优先题目 广度优先通过队列处理 【深度优先用栈】

将一层记录在数组中 并记录数组长度 找下一行所有数据 将数组首位弹出 将首位的左右节点追在数组后 按照记录的数组长度 将上层的结点全部弹出后 此时数组只剩下下一行结点了 此时就完成了一层的遍历 对本题而言 只需在找下层结点前 将本行最后一项记录即可

广度优先公式

 var arr=[]  //用来记录行节点 每行都存与arr数组中
  arr.push(root)
  while(arr.length>0){
    //你的操作    
    //本题是记录末位

    var len=arr.length
    while(len>0){
      var now=arr.shift()
      if(now.left!=null)
        arr.push(now.left)
      if(now.right!=null)
        arr.push(now.right)
      len--
    }
  }

代码

var rightSideView = function(root) {
  if(root==null)
    return []
  var arr=[]
  var res=[]
  arr.push(root)

  while(arr.length>0){
    res.push(arr[arr.length-1].val)
    var len=arr.length
    while(len>0){
      var now=arr.shift()
      if(now.left!=null)
        arr.push(now.left)
      if(now.right!=null)
        arr.push(now.right)
      len--
    }
  }
  return res

};

参考链接