654 최대 이진 트리
중복되지 정수 배열을 감안할 때. 이 배열에 구축 최대 나무는 다음과 같이 정의된다 :
- 뿌리는 배열의 최대 수입니다.
- 좌측 서브 트리가 최대 수로 나눈 좌측 서브 어레이로 구성되는 최대 트리이다.
- 우측 서브 트리가 최대 수로 나눈 우측 서브 어레이로 구성되는 최대 트리이다.
지정된 배열 출력하여 트리의 루트 노드의 최대 트리를 구축.
-------------------------------------------------- -------------------------------------------------- --------------
을 감안할 때 정수의 배열이 반복되지 않습니다. 다음을 설정하는 배열에 정의 된 최대 나무 :
- 뿌리는 배열의 최대 수입니다.
- 좌측 서브 트리가 왼쪽에서 가장 큰 나무로부터 얻어진 서브 어레이의 최대 개수에 의해 나누어진다.
- 우 서브 트리가 최대 수로 나눈 서브 어레이에 적합한 최대의 트리 구조의 부분이다.
특정 어레이 구성 및 트리 트리의 루트 노드의 최대 출력 스루.
-------------------------------------------------- -------------------------------------------------- --------------
예 1 :
입력 : [3,2,1,6,0,5] 출력은 다음 트리를 나타내는 트리의 루트 노드를 반환 : 6 / \ 3~5 \ / 2 0 \ 1
노트 :
- 주어진 배열의 크기는 범위 [1,1000]에있을 것이다.
주제는 쉽게 솔루션을 생각하는 것입니다, 어려운되지 않습니다 :
- 어레이의 최대 값 인 루트 노드를 만들기
- 어레이의 좌측 절반의 최대 값은 상기 좌측의 루트 노드를 생성하기 위해 좌측 노드
- 어레이의 우측 절반의 최대 값은 루트 노드의 우측 노드의 우측 노드를 만들
- 재귀 위의 작업
# 이진 트리 노드에 대한 정의. # 클래스의 TreeNode : # DEF __init __ (자체, X) : #의 self.val X = # self.left = 없음 # self.right = 없음 클래스 해결책 : DEF constructMaximumBinaryTree (자기, nums리스트 [INT]) ->의 TreeNode : : nums == 만약, 복귀 없음 인덱스 = nums.index (최대 (nums)) 루트의 TreeNode = (최대 (nums)) root.left = self.constructMaximumBinaryTree (nums [: 인덱스]) root.right = self.constructMaximumBinaryTree (nums [인덱스 + 1]) 복귀 루트
두 이진 검색 트리에서 1305의 모든 요소
두 이진 검색 트리를 감안 root1
하고 root2
.
포함하는 목록 돌려 정수 모두 에서 두 나무가 오름차순으로 정렬합니다.
예 1 :
입력 : ROOT1 = [2,1,4] ROOT2 = [1,0,3] 출력 [0,1,1,2,3,4]
예 2 :
입력 : ROOT1 = [0, -10,10] ROOT2 = 5,1,7,0,2] 출력 : -10,0,0,1,2,5,7,10]
예 3 :
입력 : ROOT1 = [], ROOT2 = 5,1,7,0,2] 출력 : 0,1,2,5,7]
예 4 :
입력 : ROOT1 = [0, -10,10] ROOT2 = [] 출력 : -10,0,10]
예 5 :
입력 : ROOT1 = [1, NULL, 8] ROOT2 = [8,1] 출력 [1,1,8,8]
제약 :
- 각각의 나무는 대부분의에서이
5000
노드. - 각 노드의 값은 사이
[-10^5, 10^5]
.