이 진 트 리 의 한 층 을 인쇄 합 니 다.
이 진 트 리 에 대해 알고리즘 을 설계 하여 특정한 깊이 의 모든 노드 를 포함 하 는 링크 를 만 드 십시오.이 진 트 리 의 뿌리 노드 포인터 TreeNode * root 와 링크 에 있 는 노드 의 깊이 를 지정 합 니 다. 링크 ListNode 를 되 돌려 주 십시오. 이 깊이 에 있 는 모든 노드 의 값 을 대표 합 니 다. 나무 에서 왼쪽 에서 오른쪽으로 연결 하여 깊이 가 나무의 높이 를 초과 하지 않도록 하 십시오. 나무 에 있 는 노드 의 값 은 마이너스 정수 가 아니 고 100000 을 초과 하지 않도록 하 십시오.
Code
#include <bits/stdc++.h>
using namespace std;
struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
TreeNode(int x) :
val(x), left(NULL), right(NULL) {
}
};
struct ListNode {
int val;
struct ListNode *next;
ListNode(int x) : val(x), next(NULL) {}
};
class TreeLevel {
public:
ListNode* getTreeLevel(TreeNode* root, int dep) {
ListNode* head=(ListNode* )malloc(sizeof(ListNode));
ListNode* l=head;
l=head;
queue<TreeNode* >Q;
if(root)
Q.push(root);
int num = 1,dept=1,tag=0;
while(!Q.empty()&&dept<=dep) {
int num1=0;
for(int i=0; i<num; i++) {
TreeNode* tmp = Q.front();
Q.pop();
if(dept==dep) {
if(!tag) {
head->val=tmp->val;
l=head;
tag=1;
} else {
ListNode* r=(ListNode* )malloc(sizeof(ListNode));
r->val=tmp->val;
l->next=r;
l=r;
}
}
if(tmp->left) {
Q.push(tmp->left);
num1++;
}
if(tmp->right) {
Q.push(tmp->right);
num1++;
}
}
dept++;
num=num1;
}
l->next=NULL;
return head;
}
} s;
int main() {
TreeNode f1=TreeNode(1);
TreeNode f2=TreeNode(2);
TreeNode f3=TreeNode(3);
TreeNode f4=TreeNode(4);
f1.left=&f2;
f2.left=&f4;
f1.right=&f3;
TreeNode* root = &f1;
ListNode* ans = s.getTreeLevel(root,1);
while(ans) {
printf("%d -> ",ans->val);
ans = ans->next;
}
puts("");
return 0;
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
하나의 단일 체인 테이블의 순환과 귀속 실현을 반전시키다텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.