程式語言 - LeetCode - C - 199. Binary Tree Right Side View



參考資訊:
https://www.cnblogs.com/grandyang/p/4392254.html

題目:


解答:

/**
 * 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)
{
    #define MAX_SIZE 101

    int st = 0;
    int sp = 0;
    int *r = calloc(MAX_SIZE, sizeof(int));
    struct TreeNode *q[MAX_SIZE] = { 0 };

    *returnSize = 0;
    if (!root) {
        return r;
    }

    q[sp++] = root;
    while (st < sp) {
        int i = 0;
        int len = sp;

        r[(*returnSize)++] = q[sp - 1]->val;
        for (i = st; i < len; i++) {
            st += 1;

            if (q[i]->left) {
                q[sp++] = q[i]->left;
            }

            if (q[i]->right) {
                q[sp++] = q[i]->right;
            }
        }
    }

    return r;
}