이진 트리의 문제 해결 방안

소개

  재귀 바이너리 자체가 생성되는 트리, 그래서 관련 문제를 해결하기 위해 시간이, 첫째 할 재귀를 사용하는 것입니다 ,

       그러나, 시간과 공간 알고리즘의, 그래서 재귀 변환하려고 반복 할을 .

재귀 문제 해결 방안

  재귀는 실행하는 과정에 자신의 전화 .

    재귀 구성 조건이 있어야한다, :

    1. 원래의 문제를 실행해야합니다 아이는 같은 일을 하고, 더 간단 ;
    2. 자체를 호출하지 무제한 수행 출구가 있어야합니다 , 비 재귀 처리를 위해 상황을 단순화합니다.

      하이라이트 : 

              1. 먼저 할 일은 자신의 결정하는 가장 작은 단위를 하고 적어;

                  하위 문제가 원래 문제가 있는지 아이의 일을 같은 것을, 그래서 있기 때문입니다, 원래의 문제를 식별 할 것이다

        2. 문제 아이 식별 종료 조건을 ;

                 이것은 재귀가 궁극적으로 말 할 필요가 있기 때문에 당신이 최소 단위를 결정해야하므로, 즉, 반환의 결과이다 (무엇을 반환) 결과를 반환 할 필요가

                그리고 그는의 어떤 최종 조건 .

            3. 방법의 원래의 질문 찾습니다 조건 방법의 하위 문제를 변환을 :

                 일반적으로 + B를 반환 A를 입력하는 등의 형태가있다

다음과 같이 따라서, 위의 단계가 요약되어 있습니다 : (프로그래밍 아이디어는 작은 문제를 찾기 위해 중지하는 방법 작은 문제는 작은 문제가 큰 문제를 설정 아래에서 위로 쓸 자아의 구현을 달성하기 위해 위에서 아래로)

 

재귀 케이스 :
 
    이진 트리와 대상을 감안할 때이 노선에, 트리 경로의 리프 노드에 루트 노드가 있는지 여부를 모든 노드를 결정하고, 목표 값과 같은이 추가됩니다.


实现代码: 
/ *
* * 이진 트리 노드에 대한 정의. * 공용 클래스의 TreeNode { * INT의 발; * TreeNode에 남음; * TreeNode를 오른쪽; *의 TreeNode (INT의 X) {X = 브로; } *} * / 클래스 해결 { 공개 부울 hasPathSum (TreeNode를 루트 INT의 합) { INT의 카운트 = 0 ; 반환 preOder (루트, 수, 합계); } 개인 부울 preOder (TreeNode를 루트, INT의INT는 예상) { 경우 (루트 == 널 (null) ) { 반환 거짓 ; } SUM + = root.val를 // . 1, 최소 단위를 수행 IF ( root.left == 널 && root.right == 널 ) { // 2 종단 상태 복귀 SUM == 예상; } || preOder은 (root.left는 SUM은 기대)를 호출 preOder는 (root.right는 SUM은 기대) /// . 3 서브 문제가 큰 문제 } }

 

 

비 재귀 아이디어

 

    

 

추천

출처www.cnblogs.com/helloqiufei/p/11482975.html