算法每日一题:找树左下角的值

72 阅读1分钟

题目

给定一个二叉树的 根节点 root,请找出该二叉树的 最底层 最左边 节点的值。 假设二叉树中至少有一个节点。 

 示例 1:

输入: root = [2,1,3]
输出: 1 

示例 2: 

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

答案:

/**前序遍历
* @param {TreeNode} root
* @return {number}
*/
var findBottomLeftValue = function(root) {  
    let maxLevel = -1;// 当前层级  
    let value = 0;  // 默认值  
    var dfs = function(root, level){    
        if(!root) return null;    
        if(level > maxLevel){// 判断是否是最大层级,只更新同层最左边的数      
            maxLevel = level      
            value = root.val    
        }    
        dfs(root.left, level + 1)    
        dfs(root.right, level + 1)  
    }  
    dfs(root, 0)  
    return value
};


/**   层序遍历 
* @param {TreeNode} root 
* @return {number} 
*/
var findBottomLeftValue = function(root) {    
    if(!root) return null;    
    const level = [root];//初始层    
    let mostLeft = null;    
    while(level.length > 0){        
        let curLevelSize = level.length; // 当前 层 的个数        
        //因为是层序遍历,所以每次层的level的第一个必然是最左边的节点        
        mostLeft = level[0];        
        for(let i = 0; i < curLevelSize; i++){            
            const curNode = level.shift();//删除数组的第一个元素,并返回被删除的(即第一个元素)内容。            
            curNode.left && level.push(curNode.left)            
            curNode.right&& level.push(curNode.right)        
        }    
    }  
    return mostLeft.val
};

来源:力扣(LeetCode)