Leetcode 742.두 갈래 나무의 가장 가까운 잎사귀 결점
9365 단어 LeetCode
제목 설명
각 결점의 값이 서로 다른 두 갈래 나무와 목표 값 k를 정하고 나무 중 목표 값 k와 가장 가까운 잎 결점을 찾아낸다.
이곳은 잎결점과 최근에 두 갈래 나무에서 이 잎 노드에 도달하려면 행진해야 하는 변수가 다른 잎결점에 도달하는 것보다 가장 적다는 것을 나타낸다.그리고 결점이 아이의 결점이 없을 때 잎결점이라고 부른다.
다음 예에서 입력한 트리는 한 줄씩 평평하게 표시됩니다.실제로 루트는 TreeNode 객체 형식으로 제공됩니다.
예 1:
입력:
root = [1, 3, 2], k = 1
두 갈래 트리 그림: 1
/ \
3 2
출력: 2(또는 3)
설명: 2와 3은 모두 목표 1에서 가장 가까운 잎 노드이다.
예 2:
입력:
root = [1], k = 1
출력: 1해석: 최근의 잎 노드는 뿌리 결점 자체이다.
예 3:
입력:
root = [1,2,3,4,null,null,null,5,null,6], k = 2
두 갈래 트리 그림:
1
/ \
2 3
/
4
/
5
/
6
출력: 3 해석: 값이 3인 잎 노드는 결점 2에서 가장 가까운 결점이다.
주:
root가 표시하는 두 갈래 나무는 최소 1개의 결점이 있고 최대 1000개의 결점이 있다.매 결점마다 유일한 노드가 있다.val, 범위는 [1,1000]입니다.주어진 두 갈래 나무 중 어떤 결점이 노드를 만든다.val == k.
출처: 리코드(LeetCode) 링크:https://leetcode-cn.com/problems/closest-leaf-in-a-binary-tree저작권은 인터넷 소유에 귀속된다.상업 전재는 정부에 연락하여 권한을 부여하고, 비상업 전재는 출처를 명시해 주십시오.
생각
사고방식도 DFS를 사용하여 트리를 인접 테이블로 변환하여 나타내는 그림입니다. 이 문제와 863의 차이점은 다음과 같습니다.
visited
표시를 넣어야 한다. 그렇지 않으면 사순환에 빠질 것이다.목록을 사용하여 대기열의 쓰기를 시뮬레이션합니다.
a.insert(0, item) #
top = a.pop() #
front = a[-1] #
왼쪽은 팀의 끝이고, 오른쪽은 팀의 우두머리다.
코드
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution:
def findClosestLeaf(self, root: TreeNode, k: int) -> int:
isLeaf = [False] * 1001 # 1000
from collections import defaultdict
g = defaultdict(set)
# DFS
def dfs(root):
# print("...")
if root != None and root.left == None and root.right == None:
# print(" ...")
isLeaf[root.val] = True
if root.left:
g[root.val].add(root.left.val)
g[root.left.val].add(root.val)
dfs(root.left)
if root.right:
g[root.val].add(root.right.val)
g[root.right.val].add(root.val)
dfs(root.right)
#
dfs(root)
# BFS
visited = { k }
que = [k] #
while len(que) != 0:
top = que.pop()
if isLeaf[top]:
return top
for val in g[top]:
if val not in visited:
if isLeaf[val]:
return val
que.insert(0, val)
visited.add(val)
return -1
2019.10 Update:
제1회 PAT 알고리즘 생방송 강습반 모집장, 자세한 내용 보기 클릭,
END.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
python 문자열 입력으로 모든 유효한 IP 주소 생성(LeetCode 93번 문제)이 문제의 공식 난이도는 Medium으로 좋아요 1296, 반대 505, 통과율 35.4%를 눌렀다.각 항목의 지표로 말하자면 보기에는 약간 규범에 맞는 것 같지만, 실제로도 확실히 그렇다.이 문제의 해법과 의도는 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.