두 갈래 수와 두 갈래 나무의 범람을 생성하다
24509 단어 cpp두 갈래 나무두 갈래 나무 생성두 갈래 나무가 두루 다니다
두 갈래 수와 두 갈래 나무의 범람을 생성하다
중차 생성 만 두 갈래 수
linkedQueue<binaryTreeNode<char> *> q;
void insertByLevel(char a, int j, int l) {
if (!q.empty()&&j<l) {
binaryTreeNode<char> *t = q.front();
q.pop();
t->element = a;
if (2 * j + 1 < l) {
t->leftChild = new binaryTreeNode<char>;
q.push(t->leftChild);
}
else {
t->leftChild = NULL;
}
if (2 * j + 2 < l) {
t->rightChild = new binaryTreeNode<char>;
q.push(t->rightChild);
}
else {
t->rightChild = NULL;
}
}
}
binaryTreeNode<char> *creatByLevel(string str) {
int length = (int) str.size();
while (!q.empty()) {
q.pop();
}
auto *t = new binaryTreeNode<char>;
q.push(t);
for (int j = 0; j < length; ++j) {
insertByLevel(str.at(j), j, length);
}
return t;
}
앞 순서와 중간 순서에 따라 두 갈래 트리를 생성하다
binaryTreeNode<char> *creatByPreAndIn(string str1, string str2) {
int l = (int) str1.size();
auto *t = new binaryTreeNode<char>;
t->element = str1.at(0);
for (int i = 0; i < l; ++i) {
if (str2.at(i) == str1.at(0)) {
if (i != 0&&l>1) {
t->leftChild = creatByPreAndIn(str1.substr(1, i), str2.substr(0, i));
} else {
t->leftChild = NULL;
}
if (l > i + 1) {
t->rightChild = creatByPreAndIn(str1.substr(i + 1, l - i - 1), str2.substr(i + 1, l - i - 1));
} else {
t->rightChild = NULL;
}
}
}
return t;
}
두 갈래 나무가 두루 다니다
//
template<class T>
void visit(binaryTreeNode<T> *x, const int *i, int l) {
if (x!= nullptr) {
if (i[0] < l - 1) {
cout << x->element << ",";
} else if (i[0] == l - 1) {
cout << x->element << endl;
}
}
}
//
template<class T>
void preOrder(binaryTreeNode<T> *t, int *i, int l) {
if (t != NULL) {
visit(t, i, l);
i[0]++;
preOrder(t->leftChild, i, l);
preOrder(t->rightChild, i, l);
} else{
return;
}
}
//
template<class T>
void inOrder(binaryTreeNode<T> *t, int *i, int l) {
if (t != NULL) {
inOrder(t->leftChild, i, l);
visit(t, i, l);
i[0]++;
inOrder(t->rightChild, i, l);
} else{
return;
}
}
//
template<class T>
void postOrder(binaryTreeNode<T> *t, int *i, int l) {
if (t != NULL) {
postOrder(t->leftChild, i, l);
postOrder(t->rightChild, i, l);
visit(t, i, l);
i[0]++;
} else{
return;
}
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
MinGW-W64용 Windows에서 복잡한(실제로는 아님) Boost 컴파일.C++를 사용하는 경우 매우 유용한 수많은 라이브러리를 생성하는 커뮤니티 기반 프로그램인 Boost를 우연히 발견했을 것입니다. 그 중 일부는 C++17부터 포함된 파일 시스템 라이브러리와 같이 C++에 추가되었습니...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.