难度:easy
题目描述
示例
解法1:层序遍历
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* struct TreeNode *left;
* struct TreeNode *right;
* };
*/
/**
* Note: The returned array must be malloced, assume caller calls free().
*/
int* rightSideView(struct TreeNode* root, int* returnSize) {
// 输出每一层的最右端结点的值即可
// 直接层次遍历,输出每一层的最后一个结点即可
//边界相关
if(root == NULL){
*returnSize = 0;
return NULL;
}
int *res = (int*)malloc(sizeof(int)*101);
// 用数组模拟队列
struct TreeNode* queue[101];
int i, k, qsize, qsize_next, head, tail; // head和tail为模拟队列的头尾指针
struct TreeNode* p;
queue[0] = root; // 根结点入队
qsize = 1; qsize_next = 0;// qsize为当前层元素的个数,qsize_next为下一层元素的个数
head = tail = 0;
k = 0;
for(i = 0; i < qsize; i++){
p = queue[head++]; //队头元素出队
if(p->left){
queue[++tail] = p->left;
qsize_next ++;
}
if(p->right){
queue[++tail] = p->right;
qsize_next ++;
}
if(i == qsize - 1){ //如果是当前层的最后一个元素
res[k++] = p->val;
i = -1;
qsize = qsize_next;
qsize_next = 0;
}
}
*returnSize = k;
return res;
}
bug记录
力扣报错
报错原因
一开始定义的res数组是这样定义的
int* res[101];
不申请空间(不malloc)的情况下函数内建立的数组是局部变量,无法带回主函数。
解决方案
在函数里malloc需要返回的数组。注意建立数组时在中括号里写数组大小跟malloc的效果在这方面是完全不一样的。
也就是这样定义
int *res = (int*)malloc(sizeof(int)*101);