Computer >> 컴퓨터 >  >> 프로그램 작성 >> C#

C#에서 이진 트리에 주어진 경로 합계가 있는지 확인하는 방법은 무엇입니까?

<시간/>

HasPathsum은 2개의 매개변수를 취합니다. 하나는 트리 노드이고 다른 하나는 합계 값입니다. 처음에는 노드가 null인지 여부를 확인하고 노드가 null이면 false를 반환합니다. 노드가 null이 아니면 HasPathSum 재귀 메서드를 호출합니다. 각 재귀 단계에서 계속해서 노드 값에서 합계 값을 뺍니다. 합계 값이 0에 도달하면 주어진 트리에 합계와 동일한 경로가 있고 true를 반환한다는 결론에 도달합니다.

예시

public class TreesPgm{
   public class Node{
      public int Value;
      public Node LeftChild;
      public Node RightChild;
      public Node(int value){
         this.Value = value;
      }
      public override String ToString(){
         return "Node=" + Value;
      }
   }
   public bool HasPathSum(Node node, int sum){
      if (root == null){
         return false;
      }
      return helperHasPathSum(node, sum);
   }
   private bool helperHasPathSum(Node root, int sum){
      if (root == null){
         return false;
      }
      sum -= root.Value;
      if (root.LeftChild == null && root.RightChild == null && sum == 0){
         return true;
      }
      return helperHasPathSum(root.LeftChild, sum) || helperHasPathSum(root.RightChild, sum);
   }
}

입력

         5
      2    6
   1    3
7

출력

True