두 노드 의 가장 가 까 운 공공 조상 을 찾다.
3506 단어 데이터 구조
using namespace std;
template <class T>
struct BinaryTreeNode//
{
BinaryTreeNode(const T& value)
:_value(value)
,_pLeft(NULL)
,_pRight(NULL)
{}
T _value;
BinaryTreeNode* _pLeft;
BinaryTreeNode* _pRight;
};
template<class T>
class BinaryTree//
{
typedef BinaryTreeNode Node;
public:
BinaryTree()
:_pRoot(NULL)
{}
private:
Node* _pRoot;//
};
이 진 트 리 의 가장 가 까 운 공공 조상 찾기:
Node* FindCommonAncestorNode(Node* first, Node* second)
{
if(!_pRoot || !first || !second)
return NULL;
return _FindCommonAncestorNode(_pRoot, first, second);
}
void Stack(stack & s, Node* _pRoot, Node* first)//
{
Node* pCur = _pRoot;
Node* pPre = NULL;
while(pCur || !s.empty())
{
while(pCur)
{
s.push(pCur);
pCur = pCur->_pLeft;
}
Node* pTop = s.top();
if(pTop->_pRight == NULL || pTop->_pRight == pPre)
{
if(pTop->_value == first->_value)
break;
s.pop();
pPre = pTop;
}
else
pCur = pTop->_pRight;
}
}
Node* _FindCommonAncestorNode(Node* _pRoot, Node* first, Node* second)
{
stack s1;
stack s2;
Stack(s1, _pRoot, first);
Stack(s2, _pRoot, second);
while(s1.size() > s2.size())
{
s1.pop();
}
while(s1.size() < s2.size())
{
s2.pop();
}
while(s1.top() != s2.top())
{
s1.pop();
s2.pop();
}
return s1.top();
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
정수 반전Udemy 에서 공부 한 것을 중얼거린다 Chapter3【Integer Reversal】 (예) 문자열로 숫자를 반전 (toString, split, reverse, join) 인수의 수치 (n)가 0보다 위 또는 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.