開發紀錄
 
還是試著寫自己的版本,所以可能會有些多餘或是邏輯上奇怪的地方,速度可能也會比網路上找到的還要慢,但測試結果正確。
 
Question #2
Recursive Version
char smallest_character(char str[], char c)
{
    static int count = 0;    // Used for calculating the string address
 
    if(c < *str)
        return *str;
    else if (*(str + 1) != '\0') {
        ++count;
        return smallest_character((str + 1), c);
    }
    return *(str - count);
}
Hint: strc 的輸入檢查過了嗎?
Done: 使用 assert() 檢查 strc 的範圍,限制在字母範圍內
 
Iterative Version
char smallest_character(char str[], char c)
{
    int i = 0;
    while(str[i++] != '\0'){
        if( str[i-1] > c)
            return str[i-1];
    }
    return *str;
}
 
Question #3
Recursive Version
void flatten(TreeNode *pRoot)
{
    if (!pRoot) return;
    TreeNode *pTemp = pRoot->pRight;
    pRoot->pRight = pRoot->pLeft;
    pRoot->pLeft = pTemp;
 
    flatten(pRoot->pRight);                        // Already switching right and left so flatterning right first
    flatten(pRoot->pLeft);
 
    if(pRoot->pLeft != NULL) {                   // Transplant
        pTemp = pRoot;
        while (pTemp->pRight != NULL)
            pTemp = pTemp->pRight;
 
        pTemp->pRight = pRoot->pLeft;