原创 操作系統之生產者-消費者

class Resources{ private int count = 0; public synchronized void produce() { if(count < 20) {

原创 select實現echo服務器

#include <stdio.h> #define CLIENTSIZE 50 #define BUFFERSIZE 512 char ch_char(char c) { if(c >= 'a' && c <= 'z

原创 select監聽socket的connect編程實現

// // Created by xx on 2020/4/10. // #include "mySocketConnectTimeOut.h" int socket_connect_timeout(char *ip, in

原创 使用poll實現echo服務器

#define POLLSIZE 100 #define BUFFERSIZE 512 char ch_char(char c) { if(c >= 'a' && c <= 'z') return c - 32;

原创 297

二叉樹的序列化與反序列化 序列化是將一個數據結構或者對象轉換爲連續的比特位的操作,進而可以將轉換後的數據存儲在一個文件或者內存中,同時也可以通過網絡傳輸到另一個計算機環境,採取相反方式重構得到原數據。 請設計一個算法來實現二叉樹的

原创 BST+AVL+SB

BST 性質 左子樹<根節點、右子樹>根節點 用途 解決排名相關的檢索需求 基本操作 插入操作 一直插入到葉子節點 刪除操作 1、刪除葉子節點:直接刪除,並將其父節點的孩子節點置空 2、刪除度爲1的節點:刪除後,將孩子節點掛到父節

原创 select實現socket_connect_timeout

int socket_connect_timeout(char *host, int port, long timeout){ int sockfd; struct sockaddr_in server; server.s

原创 epoll的api介紹

epoll是Linux內核爲處理大批量文件描述符而作了改進的poll,是Linux下多路複用IO接口select/poll的增強版本,它能顯著提高程序在大量併發連接中只有少量活躍的情況下的系統CPU利用率。另一點原因就是獲取事件的

原创 104

二叉樹的最大深度 給定一個二叉樹,找出其最大深度。 二叉樹的深度爲根節點到最遠葉子節點的最長路徑上的節點數。 說明: 葉子節點是指沒有子節點的節點。 示例: 給定二叉樹 [3,9,20,null,null,15,7] 返回它的最

原创 102

二叉樹的層次遍歷 給定一個二叉樹,返回其按層次遍歷的節點值。 (即逐層地,從左到右訪問所有節點)。 例如: 給定二叉樹: [3,9,20,null,null,15,7] 返回其層次遍歷結果: C++,應該是最短的代碼了。 層序

原创 235

二叉搜索樹的最近公共祖先 給定一個二叉搜索樹, 找到該樹中兩個指定節點的最近公共祖先。 百度百科中最近公共祖先的定義爲:“對於有根樹 T 的兩個結點 p、q,最近公共祖先表示爲一個結點 x,滿足 x 是 p、q 的祖先且 x 的深

原创 111

二叉樹的最小深度 給定一個二叉樹,找出其最小深度。 最小深度是從根節點到最近葉子節點的最短路徑上的節點數量。 說明: 葉子節點是指沒有子節點的節點。 示例: 給定二叉樹 [3,9,20,null,null,15,7] 返回2 /

原创 112

路徑總和 給定一個二叉樹和一個目標和,判斷該樹中是否存在根節點到葉子節點的路徑,這條路徑上所有節點值相加等於目標和。 說明: 葉子節點是指沒有子節點的節點。 示例: 給定如下二叉樹,以及目標和 sum = 22,

原创 100

相同的樹 給定兩個二叉樹,編寫一個函數來檢驗它們是否相同。 如果兩個樹在結構上相同,並且節點具有相同的值,則認爲它們是相同的。 示例 1: 示例 2: 示例 3: /** * Definition for a binary

原创 226

翻轉二叉樹 翻轉一棵二叉樹。 示例: 輸入: 輸出: 備註: 這個問題是受到 Max Howell 的 原問題 啓發的 : 谷歌:我們90%的工程師使用您編寫的軟件(Homebrew),但是您卻無法在面試時在白板上寫出翻轉二叉