個人感覺樹的問題大部分都是用遞迴的思想。
首先定義樹節點結構體
typedef struct _treenode
}treenode,*treenodeptr;
構造搜尋二叉樹:
//根據輸入內容構造二叉查詢
treenodeptr constructtree()
else
}treenodeptr tmpnode = new treenode(c);
if(c < parentnode->val)
parentnode->left = tmpnode;
else
parentnode->right = tmpnode;
} return root;
}
1、樹的深度,廣度遍歷源**
//使用堆疊
//深度優先遍歷,非遞迴演算法實現
//**書寫熟練程度遠遠不夠,還要進行多次除錯,說明思路不清晰
void dfs(treenodeptr root)
if(top > 0)
}std::coutif(cur->left)
queue[head++] = cur->left;
if(cur->right)
queue[head++] = cur->right;
} std::cout<
2、二叉樹映象(劍指offer125頁)
//將給定樹,轉化為其映象,左右互換
void change(treenodeptr root)
void treemirror(treenodeptr root)
}//二叉樹映象遞迴實現
void treemirror_recu(treenodeptr root)
3、二叉樹中某一值的路徑(劍指offer 143頁)
//在二叉樹中找出和為某一值的所有路徑
//找到路徑還是比較簡單的,關鍵是列印路徑怎麼去實現
bool isleaf(treenodeptr root)
void findpath(treenodeptr root, int sum,treenodeptr stack,int top)
std::coutstd::coutelse
return;
}
4、二叉搜尋樹後序遍歷序列(劍指offer 140頁)
//後序遍歷,這裡的順序是只根節點的遍歷順序,後序即為 左子樹-右子樹-根節點 順序完成遍歷
void lrd(treenodeptr root)
; int top = 0;
treenodeptr cur = root;
while(top != 0 || cur != null)
cur = stack[top-1];
if(cur->right == null || record[top - 1] == 2)//當前節點右子樹為空,或已經二次遍歷
else//遍歷右子樹
}}
網路程式設計總結 部分
socket 類 該類實現客戶端套接字,套接字指的是兩台裝置之間通訊的端點。構造方法 public socket string host,int port 建立套接字物件,並將其連線到指定的主機上的指定的埠號,如果指定的host是null,則相當於指定位址為回送位址 是本機回送位址 例子 socke...
部分面試題總結1
一 執行緒池的底層怎麼實現的?實現類為reentrantlock類,有幾個重要的方法 lock 加鎖,如果已經被獲取則等待 trylock 嘗試獲取鎖,獲取則返回true,否則false trylock long time,keepalivetime unit 在規定時間內獲取鎖 unlock 解鎖...
網上看到的騰訊面試筆試題部分解析
1 給乙個無重複整數陣列,找到其中包含最多連續數的子集,比如給 15,7,12,6,14,13,9,11,則返回 11,12,13,14,15 2 倒轉乙個字串,要求要在原字串上執行,並且效率最高,如輸入 abc 輸出 cba 輸入 abcd 輸出 dcba 3 給定乙個整數,求出其中0出現的次數。...