각 노드에서 116 채우기 다음 마우스 오른쪽 포인터
매질
당신은 모든 잎이 같은 수준에있는 완벽한 이진 트리를 부여하고, 모든 부모는 두 아이가 있습니다. 이진 트리는 다음과 같이 정의되어있다 :
구조체 노드 { INT 발; 노드 * 왼쪽; 노드 * 권리; 다음 노드 *; }
그 바로 옆에 노드를 가리 키도록 다음의 각 포인터를 채 웁니다. 더 바로 옆에 노드가없는 경우, 다음 포인터로 설정해야합니다 NULL
.
처음에는 모두 다음 포인터로 설정됩니다 NULL
.
후속 :
- 당신은 일정한 여분의 공간을 사용할 수 있습니다.
- 재귀 접근 방식은이 문제에 대한 여분의 공간으로 간주하지 않습니다 암시 스택 공간을 가정 할 수있다, 괜찮습니다.
예 1 :
입력 : 루트 = [1,2,3,4,5,6,7] 출력 : [1, # 3, #, 4,5,6,7- #] 설명 : 위의 완벽한 이진 트리 (그림 A)을 감안할 때, 함수는 단지 그림 B에처럼, 그 바로 옆에 노드를 가리 키도록 다음의 각 포인터를 채워야한다 '는 다음 포인터로 연결로 출력하여, 레벨 순서에 연재 # '각 레벨의 끝을 의미.
제약 :
- 주어진 트리의 노드의 수보다 작다
4096
. -1000 <= node.val <= 1000
첫 번째 코드가 올바른 값을 얻을 수 없다,하지만 난 문제를 찾을 수없는, 확인 필요
두 번째는 HH의 C ++ 코드에서, 내가 무엇을있다 방법을 이해하지 않습니다
"" " # 노드에 대한 정의. 클래스 노드 (객체) : 데프 (자동, 발 = 0, 왼쪽 = 없음, 권리 = 없음, 다음 = 없음) __ __init : self.val = 브로 self.left = 왼쪽 self.right = 오른쪽 self.next = 다음 "" " #의 클래스 솔루션 (객체) : # 데프 연결 (자체, 루트) : # " "" # : 유형 루트 : 노드 # : RTYPE : 노드 # "" " # 하지 않을 경우 루트 : 리턴 # nextLevelFirst = 루트 # 동안 (root.left) : # nextLevelFirst = root.left # 동안 (루트) : # root.left.next = root.right # 경우 root.next = 없음! root.right.next = root.next.left # 루트 = root.next의 # 루트 = nextLevelFirst 클래스 솔루션 (객체) : 데프 연결 (자기 루트) : "" " : 유형 루트 : TreeLinkNode : RTYPE : 아무것도 "" " 만약 하지 루트 : 반환 없음 nextLevelFirst = 루트 동안 root.left : nextLevelFirst = root.left 동안 루트 : root.left.next = root.right 경우 root.next = 없음! root.right.next = root.next.left 루트 = root.next 루트 = nextLevelFirst
// 저자 : Huahua 클래스 솔루션 { 공개 : 무효 연결 (TreeLinkNode * 루트) { 경우 (루트!) 반환 ; 경우 (루트 레벨한다! 왼쪽 || 루트 레벨 하였다 오른쪽) 창 ; 루트 -한다 왼쪽한다 다음 = 루트 레벨 및 한다 오른쪽; 경우 (루트 레벨 및 한다 옆) 루트 -한다 우측한다 다음 = 루트 레벨한다하는 next- 및 한다 왼쪽; 연결 (루트 - & 한다 왼쪽); 연결 (루트 - & 하였다 오른쪽); } };