검지offer 면접문제-두 갈래 나무의 앞뒤 순서 두루
8183 단어 면접 문제
struct BinaryTreeNode
{
BinaryTreeNode(char data)
:_pLeftChild(NULL)
, _pRightChild(NULL)
, _data(data)
{}
BinaryTreeNode *_pLeftChild;
BinaryTreeNode *_pRightChild;
char _data;
};
트리 코드 만들기
void _CreateBinaryTree(BinaryTreeNode *&pRoot, char *pStr, size_t size, size_t& index)
{// index
if (index < size && '#' != pStr[index])
{
pRoot = new BinaryTreeNode(pStr[index]);
_CreateBinaryTree(pRoot->_pLeftChild, pStr, size, ++index);
_CreateBinaryTree(pRoot->_pRightChild, pStr, size, ++index);
}
}
void PreOrder(BinaryTreeNode *pRoot)
{
if (NULL == pRoot)
return;
stack s;
s.push(pRoot);
while (!s.empty())
{
BinaryTreeNode *top = s.top();
cout << top->_data;
s.pop();
if (top->_pRightChild)
s.push(top->_pRightChild);
if (top->_pLeftChild)
s.push(top->_pLeftChild);
}
}
테스트 용례:
void testpre()
{
BinaryTreeNode *pRoot;
char *str = "abcd"; //
size_t size = 0;
_CreateBinaryTree(pRoot, str, strlen(str), size);
PreOrder(pRoot);
cout << endl;
str = "a#b#c#d";//
size = 0;
_CreateBinaryTree(pRoot, str, strlen(str), size);
PreOrder(pRoot);
cout << endl;
str = "ab#df##g##ce#h";//
size = 0;
_CreateBinaryTree(pRoot, str, strlen(str), size);
PreOrder(pRoot);
PreOrder(NULL);
}
void Inorder(BinaryTreeNode *pRoot)
{
if (NULL == pRoot)
return;
stack s;
BinaryTreeNode *pCur = pRoot;
while (!s.empty() || pCur)
{
while (pCur)
{
s.push(pCur);
pCur = pCur->_pLeftChild;//
}
BinaryTreeNode *top = s.top();
cout << top->_data;
s.pop();
pCur = top->_pRightChild;
}
}
void testin()
{
BinaryTreeNode *pRoot;
char *str = "abcd"; // //dcba
size_t size = 0;
_CreateBinaryTree(pRoot, str, strlen(str), size);
Inorder(pRoot);
cout << endl;
str = "a#b#c#d";// //abcd
size = 0;
_CreateBinaryTree(pRoot, str, strlen(str), size);
Inorder(pRoot);
cout << endl;
str = "ab#df##g##ce#h";// //bfdgaehc
size = 0;
_CreateBinaryTree(pRoot, str, strlen(str), size);
Inorder(pRoot);
Inorder(NULL);
}
void postorder(BinaryTreeNode *pRoot)
{
if (NULL == pRoot)
return;
stack s;
BinaryTreeNode *pCur = pRoot;
BinaryTreeNode *pPre = NULL;
while (!s.empty() || pCur)
{
while (pCur)
{
s.push(pCur);
pCur = pCur->_pLeftChild;
}
BinaryTreeNode *top = s.top();
if (NULL == top->_pRightChild || pPre == top->_pRightChild)
{
cout << top->_data << " ";
pPre = top;
s.pop();
}
else
pCur = top->_pRightChild;
}
}
테스트 용례
void testpost()
{
BinaryTreeNode *pRoot;
char *str = "abcd"; // //dcba
size_t size = 0;
_CreateBinaryTree(pRoot, str, strlen(str), size);
postorder(pRoot);
cout << endl;
str = "a#b#c#d";// //dcba
size = 0;
_CreateBinaryTree(pRoot, str, strlen(str), size);
postorder(pRoot);
cout << endl;
str = "ab#df##g##ce#h";// //
size = 0;
_CreateBinaryTree(pRoot, str, strlen(str), size);
postorder(pRoot);
postorder(NULL);
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Java 프로그래머 면접에서의 다중 스레드 문제 요약wait ()/notify ()/notify All () 의 모든 방법을 호출할 때, 현재 라인이 이 대상의 자물쇠를 얻지 못하면, Illegal MonitorState Exception의 이상을 던집니다. Thre...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.