귀속 프로그램을 어떻게 씁니까

전반적으로 말하면 귀속은 두 부분으로 나뉘는데 하나는 귀속 과정, 즉 귀속 관계식(현재와 다음 호출 때의 관계)이고 다른 하나는 마지막에 귀환하는 조건이다.
예1: 두 갈래 나무의 최대 깊이.
1. 현재 귀속이 값이 3의 위치에 도달했다고 가정하면 3의 깊이는 두 개의 서브 트리의 깊이의 최대자 더하기 1, 즉 값 4와 5 중 깊이의 최대자에 의해 결정되기 때문에 관계식을 쓸 수 있다.
max(maxDepth(root->left), maxDepth(root->right)) + 1;

둘째, 언제 끝날까요? 현재 값이nullptr일 때 끝납니다. 끝의 깊이는 0입니다.
마지막에 프로그램을 받을 수 있어요.
int maxDepth(TreeNode *root) {
if (!root) {
		return 0;
	}
	return max(maxDepth(root->left), maxDepth(root->right)) + 1;
 }

예2: 균형 이차수인지 아닌지 판단
첫째, 현재 귀속된 위치의 나무가 균형이 맞는지 판단하는 것은 세 가지 조건에 의해 결정된다. 즉, 현재 위치의 나무가 균형이 맞는지, 왼쪽과 오른쪽의 나무가 균형이 맞는지 여부이다. 따라서 관계식을 쓸 수 있다.
// 
if (abs(maxDepth(root->left) - maxDepth(root->right)) > 1) {
temp =  false;
} else {
temp = true;
}
// 
temp && isBalanced(root->left) && isBalanced(root->right)
2, 언제 끝납니까? 현재 값이nullptr일 때 끝납니다.true로 되돌아갑니다.
마지막에 프로그램을 받을 수 있어요.
bool isBalanced(TreeNode *root) {
        if (!root) {
		return true;
	}
	int temp = true;
	if (abs(maxDepth(root->left) - maxDepth(root->right)) > 1) {
		temp =  false;
	} else {
		temp = true;
	}
	return temp && isBalanced(root->left) && isBalanced(root->right);
}

좋은 웹페이지 즐겨찾기