검지 Offer 응답 흐름 시리즈 - 두 갈래 나무의 깊이
면접 문제 55: 두 갈래 나무의 깊이
제목 설명
문제 (1) 두 갈래 나무의 깊이
두 갈래 나무의 뿌리 결점을 입력하여 이 나무의 깊이를 구하세요.뿌리 결점에서 잎 결점까지 순서대로 지나가는/결점(뿌리, 잎 결점 포함)은 나무의 경로를 형성하고 가장 긴 경로의 길이는 나무의 깊이이다.
문제 (2) 균형 트리
두 갈래 나무의 뿌리 결점을 입력하여 이 나무가 균형 잡힌 두 갈래 나무인지 판단한다.만약 어떤 두 갈래 나무 중 임의로 결점된 좌우 자목의 깊이 차이가 1을 넘지 않는다면, 그것은 바로 균형 두 갈래 나무이다.
문제 분석
문제 (1) 분석
첫 번째 문제는 모두에게 작은 뜻입니다. 나무의 깊이=max(왼쪽 나무 깊이, 오른쪽 나무 깊이)+1, 귀속을 통해 실현됩니다.
문제 (2) 분석
트리의 깊이를 계산해야 합니다. 트리의 깊이=max(왼쪽 트리 깊이, 오른쪽 트리 깊이)+1.
반복하는 과정에서 좌우 자목의 깊이 차이가 1을 초과하는지 판단해야 한다. 만약 균형이 맞지 않으면 나무의 깊이를 =-1로 한다.최종적으로 나무의 깊이가 -1인지 여부에 따라 이 나무가 균형 나무인지 아닌지를 확정한다.
문제 해결
질문 (1)
public int TreeDepth(Node root) {
if(root==null) {
return 0;
}
int left=TreeDepth(root.left);
int right=TreeDepth(root.right);
return Math.max(left+1,right+1);
}
질문 (2)
//
public boolean IsBalanced_Solution(Node root) {
return getDepth(root)!=-1;
}
public int getDepth(Node root) {
if(root==null) {
return 0;
}
int left=getDepth(root.left);
if(left==-1) {
return -1;
}
int right=getDepth(root.right);
if(right==-1) {
return -1;
}
return Math.abs(left - right) > 1 ? -1 : 1 + Math.max(left, right);
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.