Try   HackMD

課堂問答簡記: 2023-09-19 / 2023-09-26

作業檢討

模擬面試和策略

為什麼還要來美國或者其他國家?其實就是機會成本

1. 如何將數學式轉為內部表示方式,便於保存和計算

將數學式子轉換成 prefix 表示,消除小括號及「先乘除後加減」等規則

再將轉換完的式子以 binary tree 保存

舉一個例子說明
(3 - 4)* 4 轉為 *-344 表示 (假設每個數值只佔一個字元)

再轉為 preorder binary tree

2. 身為 interviewer 該注意的事情

  1. 不要以「面試官」等有居高臨下的口吻自稱,用「今天由我主持這場面試」較合適。
  2. 今天如果提到關鍵字,很容易使面試者以該關鍵字背出題目的解答,可以繞個圈子,用應用題的方式。
  3. 寫出題目的遞迴解之後,可以深入一步問出該遞迴在題目執行順序、深度或執行成本,或者舉出與本題目相關的另一題,如:pre-order 舉出 post-oreder,避免背答案且對程式沒有深入了解的情況。
struct node {
	int data;
	struct node *left;
	struct node *right;
};

struct node* new_node(int data){
	struct node* node = (struct node*)malloc(sizeof(struct node));
	node->data=data;
	node->left=NULL;
	node->right=NULL;
	return(node);
};

// pre-order的順序即是 根 > 左子 > 右子
void printPre(struct node *node){
	if(node == NULL) return;
	print(%d”,node->data);
	printPre(node->left);
	printPre(node->right);
}
// post-order的順序即是 左子 > 右子 > 根
// 所以將下方print的部分調整至最後即可
void printPost(struct node *node){
    
    if(node == NULL) return;
    printPre(node->left);
    printPre(node->right);
    print(%d”,node->data);
}

int main(){
    printPre(root);
    //printPost(root);
}