찾다
백엔드 개발PHP 튜토리얼이진 트리의 연결 목록

1367. 이진트리의 연결리스트

난이도:

주제: 연결 리스트, 트리, 깊이 우선 검색, 너비 우선 검색, 이진 트리

이진 트리 루트와 head가 첫 번째 노드인 연결 리스트가 주어졌습니다.

헤드에서 시작하는 연결 목록의 모든 요소가 이진 트리에 연결된 일부 하향 경로에 해당하면 True를 반환하고, 그렇지 않으면 False를 반환합니다.

이 맥락에서 하향 경로는 어떤 노드에서 시작하여 아래로 내려가는 경로를 의미합니다.

예 1:

Linked List in Binary Tree

  • 입력: 헤드 = [4,2,8], 루트 = [1,4,4,null,2,2,null,1,null,6,8,null,null,null,null ,1,3]
  • 출력: true
  • 설명: 파란색 노드는 바이너리 트리의 하위 경로를 형성합니다.

예 2:

Linked List in Binary Tree

  • 입력: 헤드 = [1,4,2,6], 루트 = [1,4,4,null,2,2,null,1,null,6,8,null,null,null ,null,1,3]
  • 출력: true

예 3:

  • 입력: 헤드 = [1,4,2,6,8], 루트 = [1,4,4,null,2,2,null,1,null,6,8,null,null ,null,null,1,3]
  • 출력: false
  • 설명: 이진 트리에는 head에서 연결된 목록의 모든 요소를 ​​포함하는 경로가 없습니다.

제약조건:

  • 트리의 노드 수는 [1, 2500] 범위에 있습니다.
  • 목록의 노드 수는 [1, 100] 범위에 있습니다.
  • 1

힌트:

  1. 연결된 목록의 포인터와 이진 트리의 노드가 주어지면 재귀 함수를 만듭니다. 헤드부터 시작하는 연결 목록의 모든 요소가 이진 트리의 일부 하향 경로에 해당하는지 확인하세요.

해결책:

연결된 목록이 이진 트리의 하향 경로와 일치할 수 있는지 재귀적으로 확인해야 합니다. 깊이 우선 검색(DFS)을 사용하여 이진 트리를 탐색하고 헤드부터 리프 노드까지 연결된 목록을 일치시키려고 시도합니다.

해결책에 접근하는 방법은 다음과 같습니다.

단계:

  1. 연결된 목록을 일치시키는 재귀 함수: 연결된 목록 노드와 트리 노드를 사용하는 도우미 함수를 만듭니다. 현재 노드에서 시작하는 연결 리스트가 이진 트리의 하향 경로와 일치하는지 확인하는 함수입니다.
  2. 트리를 통한 DFS: DFS를 사용하여 이진 트리를 탐색하고 각 노드에서 해당 노드부터 시작하여 일치하는 항목이 있는지 확인합니다.
  3. 기본 조건: 연결 목록이 완전히 탐색되면 재귀가 중지되고 true를 반환해야 하며, 이진 트리 노드가 null이거나 값이 일치하지 않으면 false를 반환해야 합니다.
  4. 모든 노드에서 검색 시작: 모든 트리 노드에서 일치 확인을 시작하여 연결된 목록의 잠재적인 시작 지점을 찾습니다.

PHP에서 이 솔루션을 구현해 보겠습니다: 1367. 이진트리의 연결리스트

<?php // Definition for a singly-linked list node.
class ListNode {
    public $val = 0;
    public $next = null;
    function __construct($val = 0, $next = null) {
        $this->val = $val;
        $this->next = $next;
    }
}

// Definition for a binary tree node.
class TreeNode {
    public $val = 0;
    public $left = null;
    public $right = null;
    function __construct($val = 0, $left = null, $right = null) {
        $this->val = $val;
        $this->left = $left;
        $this->right = $right;
    }
}

class Solution {

    /**
     * @param ListNode $head
     * @param TreeNode $root
     * @return Boolean
     */
    function isSubPath($head, $root) {
       ...
       ...
       ...
       /**
        * go to ./solution.php
        */
    }

    // Helper function to match the linked list starting from the current tree node.
    function dfs($head, $root) {
       ...
       ...
       ...
       /**
        * go to ./solution.php
        */
    }
}

// Example usage:

// Linked List: 4 -> 2 -> 8
$head = new ListNode(4);
$head->next = new ListNode(2);
$head->next->next = new ListNode(8);

// Binary Tree:
//      1
//     / \
//    4   4
//     \   \
//      2   2
//     / \ / \
//    1  6 8  8
$root = new TreeNode(1);
$root->left = new TreeNode(4);
$root->right = new TreeNode(4);
$root->left->right = new TreeNode(2);
$root->right->left = new TreeNode(2);
$root->left->right->left = new TreeNode(1);
$root->left->right->right = new TreeNode(6);
$root->right->left->right = new TreeNode(8);
$root->right->left->right = new TreeNode(8);

$solution = new Solution();
$result = $solution->isSubPath($head, $root);
echo $result ? "true" : "false"; // Output: true
?>

설명:

  1. isSubPath($head, $root):

    • 이 함수는 $head로 시작하는 연결 목록이 트리의 하향 경로에 해당하는지를 재귀적으로 확인합니다.
    • 먼저 현재 루트 노드가 목록의 시작인지 확인합니다(dfs를 호출하여).
    • 그렇지 않으면 왼쪽과 오른쪽 하위 트리를 재귀적으로 검색합니다.
  2. dfs($head, $root):

    • 이 도우미 함수는 연결된 목록이 현재 트리 노드에서 시작하는 트리와 일치하는지 확인합니다.
    • 목록이 완전히 순회되면($head === null) true를 반환합니다.
    • 트리 노드가 null이거나 값이 일치하지 않으면 false를 반환합니다.
    • 그렇지 않으면 왼쪽과 오른쪽 자식을 계속해서 검사합니다.

실행 예:

입력 헤드 = [4,2,8] 및 루트 = [1,4,4,null,2,2,null,1,null,6,8]의 경우 알고리즘은 다음을 수행합니다.

  • 루트(노드 1)에서 시작하여 일치에 실패합니다.
  • 왼쪽 하위(노드 4)로 이동하여 4를 일치시킨 다음 아래로 이동하여 2를 일치시키고 8을 일치시켜 true를 반환합니다.

복잡성:

  • 시간 복잡도: O(N * min(L, H)), 여기서 N은 이진 트리의 노드 수, L은 연결 목록의 길이, H는 이진 트리의 높이입니다. 나무.
  • 공간 복잡도: 이진 트리의 재귀 깊이로 인해 O(H)

이 솔루션은 DFS를 사용하여 바이너리 트리의 하위 경로를 효율적으로 검사합니다.

연락처 링크

이 시리즈가 도움이 되었다면 GitHub에서 저장소에 별표를 표시하거나 즐겨찾는 소셜 네트워크에서 게시물을 공유해 보세요. 여러분의 지원은 저에게 큰 의미가 될 것입니다!

이렇게 더 유용한 콘텐츠를 원하시면 저를 팔로우해주세요.

  • 링크드인
  • 깃허브

위 내용은 이진 트리의 연결 목록의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
PHP의 종속성 주입이란 무엇입니까?PHP의 종속성 주입이란 무엇입니까?May 07, 2025 pm 03:09 PM

expendencyInphpisaDesignpatternpattern thatenhances-flexibility, testability 및 maintainabilitable externaldenciestoclasses.itallowsforloosecoupling, easiertesting throughmocking 및 modulardesign, berrequirecarefultructuringtoavoid-inje

최고의 PHP 성능 최적화 기술최고의 PHP 성능 최적화 기술May 07, 2025 pm 03:05 PM

PHP 성능 최적화는 다음 단계를 통해 달성 할 수 있습니다. 1) 스크립트 상단에 require_once 또는 include_once를 사용하여 파일로드 수를 줄입니다. 2) 데이터베이스 쿼리 수를 줄이기 위해 전처리 문 및 배치 처리를 사용하십시오. 3) Opcode 캐시에 대한 Opcache 구성; 4) PHP-FPM 최적화 프로세스 관리를 활성화하고 구성합니다. 5) CDN을 사용하여 정적 자원을 배포합니다. 6) 코드 성능 분석을 위해 Xdebug 또는 Blackfire를 사용하십시오. 7) 배열과 같은 효율적인 데이터 구조를 선택하십시오. 8) 최적화 실행을위한 모듈 식 코드를 작성하십시오.

PHP 성능 최적화 : Opcode 캐싱 사용PHP 성능 최적화 : Opcode 캐싱 사용May 07, 2025 pm 02:49 PM

opCodeCachingsIntIficInlyIntImeRimproveSphpperformanceCachingCompileDCode, retingServerLoadandResponsEtimes.1) itStoresCompyledPhpCodeInMemory, BYPASSINGPARSINGCOMPILING.2) UseOpCacheSettingParametersInphP.Ini, likeMoryConsAncme AD

PHP 의존성 주입 : 코드 유지 관리를 향상시킵니다PHP 의존성 주입 : 코드 유지 관리를 향상시킵니다May 07, 2025 pm 02:37 PM

종속성 주입은 PHP의 외부 주입을 통해 객체 종속성을 제공하여 코드의 유지 관리 및 유연성을 향상시킵니다. 구현 방법에는 다음이 포함됩니다. 1. 생성자 주입, 2. 값 주입 세트, 3. 인터페이스 주입. 종속성 주입을 사용하면 분리되어 테스트 성과 유연성을 향상시킬 수 있지만 복잡성과 성능 오버 헤드가 증가 할 가능성에주의를 기울여야합니다.

PHP에서 의존성 주입을 구현하는 방법PHP에서 의존성 주입을 구현하는 방법May 07, 2025 pm 02:33 PM

PHP에서 의존성 주입 (DI) 구현은 수동 주입 또는 DI 컨테이너를 사용하여 수행 할 수 있습니다. 1) 수동 주입은 Userservice 클래스 주입 로거와 같은 생성자를 통해 종속성을 통과합니다. 2) DI 컨테이너를 사용하여 컨테이너 클래스와 같은 종속성을 자동으로 관리하여 로거 및 사용자 서비스를 관리합니다. DI를 구현하면 코드 유연성 및 테스트 가능성을 향상시킬 수 있지만 오버 삽입 및 서비스 로케이터 안티 모드와 같은 트랩에주의를 기울여야합니다.

unset ()와 session_destroy ()의 차이점은 무엇입니까?unset ()와 session_destroy ()의 차이점은 무엇입니까?May 04, 2025 am 12:19 AM

thedifferencebetweenUnset () andsession_destroy () istssection_destroy () thinatesTheentiresession.1) TEREMOVECIFICESSESSION 'STERSESSIVEBLESSESSIVESTIETSTESTERSALLS'SSOVERSOLLS '를 사용하는 것들

로드 밸런싱의 맥락에서 스티커 세션 (세션 친화력)이란 무엇입니까?로드 밸런싱의 맥락에서 스티커 세션 (세션 친화력)이란 무엇입니까?May 04, 2025 am 12:16 AM

stickysessionsureSureSureRequestSaroutEdToTheSERSESSESSESSESSESSESSESSESSESSESSESSESSESSESSESSESSESSESSESSESSESSESSESSESINCENSENCY

PHP에서 사용할 수있는 다른 세션 저장 핸들러는 무엇입니까?PHP에서 사용할 수있는 다른 세션 저장 핸들러는 무엇입니까?May 04, 2025 am 12:14 AM

phpoffersvarioussessionsaveAndlers : 1) 파일 : 기본, 단순, 단순한 BUTMAYBOTTLENECKONHIGH-TRAFFICSITES.2) MEMCACHED : 고성능, IdealForspeed-CriticalApplications.3) Redis : SimilartomemCached, WithaddedPersistence.4) 데이터베일 : OffforIntegrati

See all articles

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

Video Face Swap

Video Face Swap

완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

뜨거운 도구

에디트플러스 중국어 크랙 버전

에디트플러스 중국어 크랙 버전

작은 크기, 구문 강조, 코드 프롬프트 기능을 지원하지 않음

WebStorm Mac 버전

WebStorm Mac 버전

유용한 JavaScript 개발 도구

DVWA

DVWA

DVWA(Damn Vulnerable Web App)는 매우 취약한 PHP/MySQL 웹 애플리케이션입니다. 주요 목표는 보안 전문가가 법적 환경에서 자신의 기술과 도구를 테스트하고, 웹 개발자가 웹 응용 프로그램 보안 프로세스를 더 잘 이해할 수 있도록 돕고, 교사/학생이 교실 환경 웹 응용 프로그램에서 가르치고 배울 수 있도록 돕는 것입니다. 보안. DVWA의 목표는 다양한 난이도의 간단하고 간단한 인터페이스를 통해 가장 일반적인 웹 취약점 중 일부를 연습하는 것입니다. 이 소프트웨어는

mPDF

mPDF

mPDF는 UTF-8로 인코딩된 HTML에서 PDF 파일을 생성할 수 있는 PHP 라이브러리입니다. 원저자인 Ian Back은 자신의 웹 사이트에서 "즉시" PDF 파일을 출력하고 다양한 언어를 처리하기 위해 mPDF를 작성했습니다. HTML2FPDF와 같은 원본 스크립트보다 유니코드 글꼴을 사용할 때 속도가 느리고 더 큰 파일을 생성하지만 CSS 스타일 등을 지원하고 많은 개선 사항이 있습니다. RTL(아랍어, 히브리어), CJK(중국어, 일본어, 한국어)를 포함한 거의 모든 언어를 지원합니다. 중첩된 블록 수준 요소(예: P, DIV)를 지원합니다.

Atom Editor Mac 버전 다운로드

Atom Editor Mac 버전 다운로드

가장 인기 있는 오픈 소스 편집기