이 진 트 리 균형 검사

【 성명: 판권 소유, 전재 출처 표시, 상업 용도 로 사용 하지 마 십시오. 연락처:[email protected]] 제목 링크:http://www.nowcoder.com/practice/b6bbed48cd864cf09a34a6ca14a3976f?rp=1&ru=/ta/cracking- the - coding - interview & qru = / ta / cracking - the - coding - interview / question - ranking 제목 설명 은 하나의 함 수 를 실현 하고 이 진 트 리 의 균형 여 부 를 검사 합 니 다. 균형 적 인 정 의 는 다음 과 같 습 니 다. 트 리 의 임의의 노드 에 대해그 두 자목 의 높이 차 는 1 을 초과 하지 않 는 다.트 리 의 끝 점 을 가리 키 는 포인터 TreeNode * root 를 지정 합 니 다. 이 나무의 균형 여 부 를 나타 내 는 bool 을 되 돌려 주 십시오.사고방식 의 가장 간단 한 방법 은 모든 노드 가 재 귀적 으로 그 깊이 를 파악 한 다음 에 비교 하 는 것 이다. 그러나 이렇게 하면 대량의 무의미 한 조작 을 가 져 올 것 이다. 효율 이 높 지 않 으 면 우 리 는 뿌리 노드 에서 잎 결점 까지 검색 하고 거 슬러 올 라 가 는 과정 에서 그 깊이 를 되 돌려 주 며 같은 층 으로 비교 할 수 있다. 만족 하지 않 는 상황 이 있 으 면 바로 끝난다
/*
struct TreeNode {
    int val;
    struct TreeNode *left;
    struct TreeNode *right;
    TreeNode(int x) :
            val(x), left(NULL), right(NULL) {
    }
};*/

class Balance
{
	public:
		bool isBalance(TreeNode *root)
		{
			// write code here
			if(root==nullptr)
				return true;
			return checkHeight(root)>=0;
		}
		int checkHeight(TreeNode *root)
		{
			if(root==nullptr)
				return 0;
			int leftHeight = checkHeight(root->left);
			if(leftHeight==-1)
				return -1;
			int rightHeight = checkHeight(root->right);
			if(rightHeight==-1)
				return -1;
			if(abs(leftHeight-rightHeight)>1)
				return -1;
			return max(leftHeight,rightHeight)+1;
		}
};

좋은 웹페이지 즐겨찾기