本題與之前102題的思路時一樣的,102題儲存的數續倒轉就行。
int** levelorderbottom(struct treenode* root, int** columnsizes, int* returnsize)
//還是從函式介面分析,root為樹的根節點,根據題意需要傳出按層次(從葉子到根)遍歷該樹的結果,乙個二維的陣列,但是單純的返回這個陣列是沒有太大意義的。因此它需要傳出這個陣列對應的資料。columnsizes是儲存那個二維陣列每一行有多少個元素,returnsize是儲存總共有多少行。他們作為形參傳入函式,為了保留他們的值,確不能使用return返回,函式只能有乙個返回值。所以需要傳入乙個指標來達到修改的目的。
舉個例子
int swap (int a, int b)
這個函式用於交換兩個形參的值,但是在函式結束之後他們就被釋放掉了,a, b的值時不會被交換的。一種解決辦法就是將傳入引數轉換為指標,這樣變數的改變就會被保留下來。
//具體的**與我之前的部落格區別不大,不懂的可以檢視leetcode102題的解題思路。
int maxdepth (struct treenode *root)
int ld = maxdepth(root->left);
int rd = maxdepth(root->right);
return (ld > rd ? ld : rd) + 1;
}void every_nums(struct treenode *root, int k, int *arr)
arr[k] += 1;
every_nums(root->left, k + 1, arr);
every_nums(root->right, k + 1, arr);
}void fetch_result(struct treenode *root, int k, int **ret, int *size, int depth)
ret[depth - k - 1][size[depth - k - 1]++] = root->val;
fetch_result(root->left, k + 1, ret, size, depth);
fetch_result(root->right, k + 1, ret, size, depth);
return ;
}//在這個地方多傳入了乙個樹的深度引數。
int** levelorderbottom(struct treenode* root, int** columnsizes, int* returnsize)
fetch_result(root, 0, ret, size, depth);
*returnsize = depth;
*columnsizes = size;
return ret;
}
c語言 解引用
最近接觸到了乙個新的概念,叫 解引用 就是在函式傳參時,如果傳入的是指標,在函式體中未對它解引用,那麼,這個指標指向的值就不會發生改變。引用別人部落格中的概念 參考這三篇部落格,感謝他們。首先,我們來看swap的常見錯誤用法。void swap int p1,int p2 void swap err...
關於《明解C語言》
不得不說,對於我這種笨人,這本書簡直就是神書。猶記得上學期在華班的時候,也是要上 資料結構 這門課。然鵝當時的我只學過python,對c語言的了解基本等於零。然鵝我發現了這本書,用了3個晚上把它看完。然後那學期資料結構就考了98分。然鵝這學期士諤也有資料結構啊,然鵝這學期的資料結構比華班的資料結構難...
C語言位域精解
有些資訊在儲存時,並不需要占用乙個完整的位元組,而只需佔幾個或乙個二進位制位。例如在存放乙個開關量時,只有0和1 兩種狀態,用一位二進位即可。為了節省儲存空間,並使處理簡便,語言又提供了一種資料結構,稱為 位域 或 位段 所謂 位域 是把乙個位元組中的二進位劃分為幾個不同的區域,並說明每個區域的位數...