题目![](https://img-blog.csdnimg.cn/2b542bb28dd84b228e136d2bedab66ef.png)
示例![](https://img-blog.csdnimg.cn/819b4c2c53ae4ad685b07cd7429c6bda.png)
思路
解题思路
对树进行层次遍历,根据题意每次保存每一层的最后一个元素即可
代码
/**
* 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().
*/
//广度遍历BFS,二叉树层序遍历,每次保存最右边一个
#define MAX_SIZE 101
int* rightSideView(struct TreeNode* root, int* returnSize){
int *res = (int *)malloc(sizeof(int)*MAX_SIZE);
memset(res,0,sizeof(int)*MAX_SIZE);
*returnSize = 0;
if(root == NULL ){
return NULL;
}
/*1. 申请一个队列保存*/
struct TreeNode ** queue =(struct TreeNode **)malloc(sizeof(struct TreeNode *)*MAX_SIZE);
memset(queue,0,sizeof(struct TreeNode *)*MAX_SIZE);
struct TreeNode * cur = NULL;
int head = 0,tail = 0;
int i = 0;
int level = 0;
queue[tail++] = root; //头节点入队列
while(tail != head){
int cnt = tail - head; //计算当前层的节点数
i = 0;
while(i<cnt){
cur = queue[head++]; //取出当前节点,判断左右子树是否为空,如果不为空,入队列
if(cur->left != NULL){
queue[tail++] = cur->left;
}
if(cur->right != NULL){
queue[tail++] = cur->right;
}
i++;
}
res[level++] = cur->val; //最后一个节点加入res数组。
}
*returnSize = level;
return res;
}
作者:xun-ge-v
链接:https://leetcode.cn/problems/binary-tree-right-side-view/solution/-by-xun-ge-v-83kx/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。