2012-11-30 6 views
0

웹 사이트에서 연습을하고 운동을 할 때 함수를 구현하여 비 - 이진 트리의 높이를 찾아야합니다. 아래에 TreeNode 클래스가 있습니다.비 - 이진 트리의 높이 찾기

class TreeNode 
{ 
public: 
TreeNode(); 
TreeNode(string data); 
void addChild(TreeNode* child); 
vector<TreeNode*>& getChildren(); 
void setData(string data); 
string getData(); 
void visit(); 
}; 

이 내용은 http://codepad.org/BiXkbABf입니다. 그러나 이것은 효과가 없습니다. 어떻게이 기능을 구현할 수 있습니까?

답변

0
int hight(TreeNode* node) { 
    vector<TreeNode*>& children = node.getChildren(); 
    unsigned int h = 0; 
    for(int i = 0; i < children.size(); i++) { 
     h = std::max(h, hight(children[i])); 
    } 
    return h + 1; 
} 

return 1 + maxi; 오류입니다. 이미 현재 노드를 고려하고 있습니다. k = 1 + max(height((tree->getChildren)()[i]),height((tree->getChildren)()[i+1]));

0

루프 내의 논리가 완전히 잘못되었습니다. 웬일인지 당신은 연속적인 어린이의 쌍을보고있다. 대신 한 번에 한 아이를보고 가장 큰 키를 가진 아이를 골라야합니다.

+0

그렇지만 기능을 종료하지 않고 중지하고 다른 노드를 찾으려면 어떻게해야합니까? – user1559792

+0

각 어린이의 경우, 지금까지 본 가장 높은 높이를 추적하면서 높이를 얻습니다. – NPE

0

이 줄에는 오류가 있습니다. 스스로를 발견하려고 : 전반적인 접근 방식은 작동해야하지만 대부분의 서브 트리의 거의 높이의 높이를 두 번 계산 얻을 때문에

if(k>maxi)k=maxi; 

또한, 그것은 필요한 것보다 더 많은 작업을 수행합니다. 힌트 : 두 높이를 직접 비교하지 말고 대신 변수에 이전 하위 트리의 높이를 저장하고 하나의 하위 트리의 높이 만 변수와 비교하십시오.

0

다음으로 소스 코드 상단에 다음 줄을 추가하십시오. 그들이 무엇인지 파악하고 이에 따라 코드를 수정하려고 시도하십시오.

#include <algorithm> 
using namespace std;