두 갈래 나무 모층 노드의 합
private static int cnt = 0;
public void sumOfLevel(BinaryTreeNode root, final int level, int cur) {
if (root == null) {
return;
}
if (cur == level) {
cnt += root.value;
return;
}
if (root.left != null) {
sumOfLevel(root.left, level, cur + 1);
}
if (root.right != null) {
sumOfLevel(root.right, level, cur + 1);
}
}
cur의 초기값은 1입니다.그러나 이런 작법은 두 가지 방법을 써야 하고, 다른 하나는 cnt를 되돌려야 한다.방법 하나만 써주시면 안 돼요?
public int sumOfLevel(BinaryTreeNode root, final int level, int cur) {
if (root == null) {
return -1;
}
if (cur == level) {
return root.value;
}
int leftValue = sumOfLevel(root.left, level, cur + 1);
int rightValue = sumOfLevel(root.right, level, cur + 1);
if (leftValue < 0 && rightValue < 0) {
return -1;
}
leftValue = leftValue < 0 ? 0 : leftValue;
rightValue = rightValue < 0 ? 0 : rightValue;
return leftValue + rightValue;
}
2019-02-26 다시보기: 제목을 받고 다음 코드를 썼습니다.
int sum(BinaryTreeNode root, final int level, int cur) {
if (root == null || cur > level) {
return 0;
}
int value = 0;
if (cur == level) {
value = root.value;
}
return value + sum(root.left, level, cur + 1)
+ sum(root.right, level, cur + 1);
}
이 코드는 매우 간결한데, 알고리즘은 두 갈래 나무의 뒷부분을 두루 훑어보는 것이다.그러나 이 층이 존재하지 않으면 0으로 되돌아간다는 점은 제목에 부합되지 않는다.이 코드를 사용하려면 나무의 높이를 미리 계산하고 차원이 존재하는지 아닌지를 판단해야 하는데 너무 우아하지 않다.
int sum(BinaryTreeNode root, final int level, int cur) {
if (root == null || cur > level) {
return -1;
}
if (cur == level) {
return root.value;
}
int left = sum(root.left, level, cur + 1);
int right = sum(root.right, level, cur + 1);
if (left < 0 && right < 0) {
return -1;
}
left = left < 0 ? 0 : left;
right = right < 0 ? 0 : right;
return left + right;
}
sum () 은 루트를 루트로 하고cur층의 합을 나타낸다.cur=height, 그러면 root로 바로 돌아갑니다.value는 됩니다. 계속 귀속할 필요가 없습니다.이렇게 하면cur>height의 상황을 피할 수 있다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.