LeetCode 노트:404.Sum of Left Leaves

2605 단어 LeetCode

질문:


Find the sum of all left leaves in a given binary tree.
Example:
 3
/ \
9  20
  /  \
 15   7

There are two left leaves in the binary tree, with values 9 and 15 respectively. Return 24.

대의:


두 갈래 나무의 모든 왼쪽 잎 노드의 합을 계산하다
예:
 3
/ \
9  20
  /  \
 15   7

이 두 갈래 나무 중에는 두 개의 왼쪽 잎 노드가 있는데, 각각 9와 15이다.그래서 24로 돌아왔습니다.

생각:


사고방식에 있어서도 특별한 점은 없다. 바로 판단을 하고 세심하게 빈틈이 없으면 된다.대체적으로 왼쪽 노드가 있는지, 오른쪽 노드가 있는지 판단하는 것으로 나뉜다.왼쪽 노드가 있으면 왼쪽 노드에 하위 노드가 있는지 확인하고, 없으면 (즉 왼쪽 잎 노드) 값을 직접 추가하고, 있으면 왼쪽 노드에 계속 귀속한다.오른쪽 노드가 있고 오른쪽 노드에 하위 노드가 있으면 오른쪽 노드에 귀속됩니다. 그렇지 않으면 오른쪽 노드가 없든 오른쪽 노드가 없든 하위 노드(즉 오른쪽 잎 노드)는 플러스 0으로 간주됩니다.주의해야 할 것은 자체 노드가 자신이null이면 0으로 되돌아가야 한다는 것이다.또한 뿌리 노드 자신만 있으면 0으로 돌아가야 한다. 제목이 왼쪽 잎 노드를 말하므로 뿌리 노드는 계산하지 않는다.마지막으로 주의해야 할 것은 모든 노드의 하위 노드나 값을 판단하기 전에 이 노드 자체가null인지 아닌지를 판단하는 것이다. 그렇지 않으면 오류가 있을 것이다.

코드(Java):

/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */
public class Solution {
    public int sumOfLeftLeaves(TreeNode root) {
        if (root == null) return 0;
        else if (root.left == null && root.right == null) return 0;
        else {
            return ((root.left != null && root.left.left == null && root.left.right == null) ? root.left.val : sumOfLeftLeaves(root.left)) + ((root.right != null && (root.right.left != null || root.right.right != null)) ? sumOfLeftLeaves(root.right) : 0);
        }
    }
}

저작권 소유:http://blog.csdn.net/cloudox_

좋은 웹페이지 즐겨찾기