[Cracking the coding interview] 한 그루의 나무가 균형이 맞는지 판단하기.

문제 정의:
        Implement a function to check if a tree is balaned. For the purpose of this question, a balanced tree is defined to be a tree such that no two leaf nodes differ in distance from the root by more than one.
생각:
각각 왼쪽 나무가 균형이 맞는지 아닌지를 판단하고 왼쪽 나무의 깊이를 되돌린다. 같은 이치로 오른쪽 나무가 균형이 맞는지 판단하고 오른쪽 나무의 깊이를 되돌린다. 만약에 왼쪽 나무의 깊이의 차이가 1을 넘지 않는다면 현재의 나무가 균형이 맞다는 것을 의미한다.
방법은 다음과 같다(구조 트리의 부분은 참고할 수 있다http://blog.csdn.net/lalor/article/details/7613621):
//// , , false
bool isBalanced(struct node *root, int *depth)
{
	if (root == NULL) 
	{
		*depth = 0;
		return true;
	}

	int left, right;
	if (isBalanced2(root->lchild, &left) && isBalanced2(root->rchild, &right)) 
	{
		int diff = left - right;
		if (diff <=1 || diff >= -1) 
		{
			*depth = 1 + (left > right ? left : right);
			return true;
		}
	}
	return false;	
}

좋은 웹페이지 즐겨찾기