1. 程式人生 > 其它 >404.左葉子之和

404.左葉子之和

計算給定二叉樹的所有左葉子之和。

示例:

3
/ \
9 20
/ \
15 7

在這個二叉樹中,有兩個左葉子,分別是 9 和 15,所以返回 24

class Solution {
    int pathSum;
    public int sumOfLeftLeaves(TreeNode root) {
        if(root==null){
            return 0;
        }
        if(root.left==null && root.right==null){
            return 0;
        }
        TreeNode left=root.left;
        if(left!=null && left.left==null && left.right==null){
             pathSum+=left.val;
        }
        sumOfLeftLeaves(root.left);
        sumOfLeftLeaves(root.right);
        return pathSum;

    }
}

  

public int sumOfLeftLeaves(TreeNode root) {
        if(root==null){
            return 0;
        }
        if(root.left==null && root.right==null){
            return 0;
        }
        TreeNode left=root.left;
        int res=0;
        if(left!=null && left.left==null && left.right==null){
             res+=left.val;
        }
    
        return sumOfLeftLeaves(root.left) + sumOfLeftLeaves(root.right)+res;

    }

  

513. 找樹左下角的值

給定一個二叉樹的 根節點 root,請找出該二叉樹的最底層最左邊節點的值。

假設二叉樹中至少有一個節點。

示例 1:

輸入: root = [2,1,3]
輸出: 1
示例 2:

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

思路:層序遍歷

class Solution {
    public int findBottomLeftValue(TreeNode root) {
        TreeNode cur=root;
        LinkedList<TreeNode> queue=new LinkedList<>();
        queue.add(cur);
        int curLevel=0;
        int lastVal=0;
        HashMap<TreeNode,Integer> levelMap=new HashMap<>();
        levelMap.put(root,1);
        
        while(!queue.isEmpty()){
            cur=queue.poll();
            int level=levelMap.get(cur);
            if(level!=curLevel){
                lastVal=cur.val;
                curLevel++;
            }
            if(cur.left!=null){
                queue.add(cur.left);
                levelMap.put(cur.left,level+1);
            }

            if(cur.right!=null){
                queue.add(cur.right);
                levelMap.put(cur.right,level+1);
            }
        }
        return lastVal;
    }
}

  

 public int findBottomLeftValue(TreeNode root) {
        LinkedList<TreeNode> queue=new LinkedList<>();
        queue.add(root);
        while(!queue.isEmpty()){
            root=queue.poll();
            if(root.right!=null){
                queue.add(root.right);
            }
            if(root.left!=null){
                queue.add(root.left);
            }         
        }
        return root.val;
    }