Given a binary tree, imagine yourself standing on the right side of it, return the values of the nodes you can see ordered from top to bottom.
For example:
Given the following binary tree,
1 <---
/ \
2 3 <---
\ \
5 4 <---
You should return [1, 3, 4].
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* struct TreeNode *left;
* struct TreeNode *right;
* };
*/
/**
* Return an array of size *returnSize.
* Note: The returned array must be malloced, assume caller calls free().
*/
int maxDepth(struct TreeNode* root) {
int i, j;
i=j=1;
if(!root) return 0;
if(root->left) i += maxDepth(root->left);
if(root->right) j += maxDepth(root->right);
if( i > j ) return i;
return j;
}
int* rightSideView(struct TreeNode* root, int* returnSize) {
int size[100];
struct TreeNode stack[10000];
int i,ress,j,k,l;
int *result;
l=maxDepth(root);
if(!root) return NULL;
result= (int*)malloc(sizeof(int*)*l);
*returnSize = l;
i=j=k=0;
stack[0] = *root;
size[0]=1;
l=1;
ress=1;
while(l!=0)
{
l=0;
for(j=0;j<size[i];j++)
{
if(stack[k+j].left) {l++;stack[ress++]=*stack[k+j].left; }
if(stack[k+j].right) {l++;stack[ress++]=*stack[k+j].right;}
}
result[i]=stack[k+j-1].val;
k += j;
size[++i]=l;
}
return result;
}
层序遍历输出每层最后一个即可。