力扣第199题,二叉树的右视图。即是从二叉树右侧看到的二叉树结点。那么可以用层次遍历然后保存每层的最后一个结点。
typedef struct node{
struct TreeNode*data[105];
int rear;
int front;
}Qunue;//定义队列
int* rightSideView(struct TreeNode* root, int* returnSize) {
int*ans=(int*)malloc(sizeof(int)*105);//申请答案数组空间
*returnSize=0;
if(!root)//是否为空树
return ans;
int k=0;
int N=105;
Qunue*q=(Qunue*)malloc(sizeof(Qunue));
q->front=q->rear=0;
q->data[q->rear]=root;//树顶入队
q->rear=(q->rear+1)%N;//队尾环比加1
while(q->rear!=q->front)//队列不为则结点还有左数或右树
{
int size=q->rear-q->front;//队列中的元素,一层的元素
for(int i=0;i<size;i++)//队列元素出队
{
struct TreeNode*s=q->data[q->front];
q->front=(q->front+1)%N;//进队和出队都要环比加1
if(i==size-1)//为一层的最右边的结点
ans[k++]=s->val;
if(s->left)//加入左树
{
q->data[q->rear]=s->left;
q->rear=(q->rear+1)%N;
}
if(s->right)//加入右树
{
q->data[q->rear]=s->right;
q->rear=(q->rear+1)%N;
}
}
}
*returnSize=k;
free(q);
return ans;
}