[LeetCode] 112. Path Sum

6094 단어
두 갈래 나무의 경로와.제목은 두 갈래 나무와 숫자sum를 주는 것이다.두 갈래 나무가 뿌리 노드에서 잎 노드까지 지나가는 모든 노드 값의 합이sum와 같을 수 있는지 확인하십시오.이 문제는 BFS와 DFS 두 가지 방법으로 해결할 수 있으며 시간과 공간의 복잡도는 모두 O(n)이다.예는 다음과 같다.
Example:
Given the below binary tree and  sum = 22 ,
      5
     / \
    4   8
   /   / \
  11  13  4
 /  \      \
7    2      1

return true, as there exist a root-to-leaf path  5->4->11->2  which sum is 22.
DFS, 비교적 직관적이어서 바로 코드를 눌렀습니다.
 1 /**
 2  * Definition for a binary tree node.
 3  * function TreeNode(val) {
 4  *     this.val = val;
 5  *     this.left = this.right = null;
 6  * }
 7  */
 8 /**
 9  * @param {TreeNode} root
10  * @param {number} sum
11  * @return {boolean}
12  */
13 var hasPathSum = function(root, sum) {
14     if (root === null) return false;
15     if (root.left === null && root.right === null) return sum === root.val;
16     return (
17         hasPathSum(root.left, sum - root.val) ||
18         hasPathSum(root.right, sum - root.val)
19     );
20 };

 
BFS
queue로 옮겨다니는 노드를 저장합니다.어떤 노드에 가입할 때 만약에 이 노드에 아이 노드가 없다면 이 노드에 가입한 후의 값이sum인지 판단해야 한다.만약 이 노드에 아이 노드가 있다면, 이어서 아이 노드를 두루 훑어보면cur.val + cur.left.val(cur.val +cur.right.val)에queue를 추가합니다.
 1 /**
 2  * @param {TreeNode} root
 3  * @param {number} sum
 4  * @return {boolean}
 5  */
 6 var hasPathSum = function(root, sum) {
 7     if (!root) return false;
 8     let queue = [root];
 9     while (queue.length) {
10         let cur = queue.shift();
11         if (!cur.left && !cur.right && cur.val === sum) {
12             return true;
13         }
14         if (cur.left) {
15             cur.left.val += cur.val;
16             queue.push(cur.left);
17         }
18         if (cur.right) {
19             cur.right.val += cur.val;
20             queue.push(cur.right);
21         }
22     }
23     return false;
24 };

좋은 웹페이지 즐겨찾기