두 갈래 나무의 구체적인 실례를 결합하여 문제의 차원 분석에 귀착되는 사상을 간략하게 이야기하다

2137 단어

앞말


제목이 설명하고자 하는 바와 같이'귀속 문제, 차원 분석'.귀환 문제는 본래 귀환 분석을 해야 하지만 우리는 반대로 하고 차원 분석을 한다. 왜냐하면 이렇게 하면 우리의 사고방식을 더욱 분명하게 할 수 있기 때문이다.다음은 구체적인 실례를 결합하여 이 팔자의 깊은 의미를 이야기하는데 사실 이런 처리 사상은 모든 귀속 문제에 적용된다.가장 중요한 것은 신념을 확고히 하는 것이다. 모든 일을 초고지 연산으로 강요해서는 안 된다.
이번 블로그에서 사용할 유형 이름 바꾸기 및 구조:
typedef int TElemType;
typedef struct BiTNode
{
	TElemType data;
	struct BiTNode *lchild, *rchild;	// 
}BiTNode, *BiTree;

2. 두 갈래 나무에서 원소값이 x인 결점을 찾아낸다


BiTNode* FindValue(BiTree root, TElemType x);
반복 문제, 차원 분석의 사상을 이곳의 프로그래밍에 사용해 보세요. 이 함수를 실현하는 사고방식은 다음과 같습니다.
현재 층은 결과를 명확하게 (이 결점을 찾든 찾지 못하든) 직접 되돌아갈 수 있다.이 층에 결점이 없거나 이 층의 결점에 대응하는 원소의 값은 x이다
현재 층은 처리할 수 없습니다. 더욱 깊은 층에서 처리할 수 있는지 찾아보기; 
// x 
BiTNode* FindValue(BiTree root, TElemType x)
{
	// 
	// , 
	// x 
	if (NULL == root || root->data == x)return root;
	else
	{
		BiTNode *ret = FindValue(root->lchild, x);	// x
		if (NULL == ret)
			ret = FindValue(root->rchild, x);	// x
		return ret;
	}
}

3. 어떤 결점의 양친을 찾아라


BiTNode* Parent(BiTree root, BiTNode *child);
여기서 우리는 또 다른 프로그래밍 습관을 길러야 한다. API는 빈 껍데기로 간단하게 처리하고 다른 함수를 기능 실현의 주체 부분으로 전환해야 한다.뿌리 결점이 비어 있고 찾으려는 결점이 비어 있거나 뿌리 결점과 찾으려는 결점이 같다는 것은 이 결점에 부모가 존재하지 않는다는 것을 의미한다. 이 세 가지 특수한 상황은 NULL로 직접 돌아가야 한다. 이 세 가지 상황을 제외한 다른 상황은 옮겨진 함수에 배치하여 처리해야 한다.
빈 셸 API
// 
BiTNode* Parent(BiTree root, BiTNode *child)
{
	if (NULL == root || NULL == child || root == child)	// 
		return NULL;
	else
		return FindParent(root, child);
}

기능 실현의 주체
BiTNode * FindParent(BiTree root, BiTNode * child)	// , 
{
	// , 
	// , 
	if (NULL == root || root->lchild == child || NULL == root->rchild) 
		return root;
	else	// , 
	{
		BiTNode *ret = FindParent(root->lchild, child);
		if (NULL == ret)	// 
			ret = FindParent(root->rchild, child);
		return ret;
	}
}

4. 독자에게 쓰는 말


본인의 블로그는 특별히 긴 것이 매우 드물다. 왜냐하면 길면 종종 완전하지 못하고 정교하지 못하기 때문에 매번 작은 문제를 꺼내서 비교적 깊이 있게 탐구할 뿐이다.이것은 더 많은 도입부입니다. 당신이 더 많은 것을 배우는 시작이 되기를 바랍니다.다들 힘내요.

좋은 웹페이지 즐겨찾기