1167 Cartesian Tree - 나무 와 층 차 를 옮 겨 다 닌 다.
1394 단어 데이터 구조 제목
분석 하 다.
작은 지붕 더미 의 중간 순 서 를 제시 하고 출력 층 서 를 제시 합 니 다.
따라서 매번 서열 에서 가장 작은 것, 즉 아버지 결점 을 찾 아야 한다.
코드
#include
using namespace std;
struct Tree {
int key;
Tree* lchild,* rchild;
Tree(int x) {
key = x;
lchild = rchild = NULL;
}
};
int quantity;
vectorheap_ordered;
Tree* BuildTree(Tree*, int, int);
void LevelPrint(Tree*);
int main() {
scanf("%d", &quantity);
heap_ordered.resize(quantity);
for (int i = 0; i < quantity; i++)
scanf("%d", &heap_ordered[i]);
Tree* root{ NULL };
root = BuildTree(root, 0, quantity - 1);
LevelPrint(root);
return 0;
}
Tree* BuildTree(Tree* T,int left,int right) {
if (right - left < 0)
return T;
auto x = min_element(heap_ordered.begin() + left, heap_ordered.begin() + right + 1) - heap_ordered.begin();
T = new Tree(heap_ordered[x]);
T->rchild = BuildTree(T->rchild, x + 1, right);
T->lchild = BuildTree(T->lchild, left, x - 1);
return T;
}
void LevelPrint(Tree* T) {
queuetemp;
temp.push(T);
bool flag{ true };
while (1) {
flag ? printf("%d", T->key), flag = false : printf(" %d", T->key);
if (T->lchild != NULL)
temp.push(T->lchild);
if (T->rchild != NULL)
temp.push(T->rchild);
temp.pop();
if (!temp.empty())
T = temp.front();
else
break;
}
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
스 택 의 유효한 출력 시퀀스 인지 아 닌 지 를 판단 합 니 다.[문제 설명] 스 택 의 입력 순 서 를 제시 하고 이 스 택 에서 출력 할 수 있 는 지 여 부 를 판단 합 니 다.가능 하 다 면 유효 출력 을 위해 전체 스 택 횟수 를 되 돌려 주 고, 그렇지 않 으 면 무효...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.