js 算法题一:二叉树的右视图

题目:

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

示例 1:

 

 

 

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

提示:

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

方法一:思路:通过层序遍历的方式,将树转换成二维数组,然后取每一层的最后一个节点

/**
 * Definition for a binary tree node.
 * function TreeNode(val, left, right) {
 *     this.val = (val===undefined ? 0 : val)
 *     this.left = (left===undefined ? null : left)
 *     this.right = (right===undefined ? null : right)
 * }
 */
/**
 * @param {TreeNode} root
 * @return {number[]}
 */
var rightSideView = function(root) {
    let res = [];
    if(!root) return res;
    const treeNode = [root];
    while(treeNode.length){
        // 该层级上所有节点内容组成的数组放入res
        res.push(treeNode.map(item=>item.val))
        const temp = [];
        for(const item of treeNode){
            item.left&&temp.push(item.left)
            item.right && temp.push(item.right)
        }
        // 先删除后压入
        treeNode.splice(0,Infinity, ...temp);
    }
    return res.map(item=>item.pop())
};

方法二:遍历节点的时候,记录当前节点的层数,然后将结果放进一个数组里,

    注意点一:先放右节点,,当该层下标的数组不存,放进去。

    注意点二:当res[level] = 0时,注意判断条件的边界线

/**
 * Definition for a binary tree node.
 * function TreeNode(val, left, right) {
 *     this.val = (val===undefined ? 0 : val)
 *     this.left = (left===undefined ? null : left)
 *     this.right = (right===undefined ? null : right)
 * }
 */
/**
 * @param {TreeNode} root
 * @return {number[]}
 */
var rightSideView = function(root) {
    const res = [];
    if(!root)return res;
    const diguiFun = (nodeTree,level)=>{
        // 因为 res[level] 为0 时,这时 !res[level] 依旧是true,就把0覆盖了
        if(res[level] === undefined) res.push(nodeTree.val)
        nodeTree.right && diguiFun(nodeTree.right,level+1)
        nodeTree.left && diguiFun(nodeTree.left,level+1)
    }
    diguiFun(root,0);
    return res
};

 

posted @ 2022-09-21 17:15  zcm花开不败  阅读(110)  评论(0编辑  收藏  举报