原创 二叉樹(三)二叉樹的高度、交換兩個子樹左右節點

比較簡單: int depth(Node *head) //空二叉樹的深度爲-1,只有根節點爲0,看連接線 這個函數求樹的深度 { if (head==NULL) { return -1; } return max(dept

原创 圖論(一)最小生成樹

最小生成樹有兩種算法:這裏先不寫代碼 1:普利姆算法(prim):初始狀態相當於兩個籃子A與B,籃子中裝的是點vertex,初始化時候A是空的,B是滿的 算法描述: 先從B中隨機找一個點放到A中,不斷從B中找距離A集合最近的一個點放到A中

原创 數據結構基礎(三)哈希表的實現

#pragma once #include <iostream> #define N 10 using namespace std; typedef struct node { int val; struct node *next;

原创 字符串處理基礎(一)反轉,循環移動

#pragma once using namespace std; void inverse(char *p); void printString(char *p); void rightMove(char *p,int n); void

原创 面試雜題(一)數組中最小的k個數

要找到數組中最小的k個數,只需要建立一個k大小的數組,或者在原數組中開闢一個大小爲k的區間,用來保留k個數; 遍歷原數組,如果有比k個數小的,就用該數去替換k數組中最大的,所以問題就轉化成在k數組中找最大的數,最差效率爲o((n-k)*k

原创 二叉樹(四)刪除二叉樹

如何刪除一個二叉樹,釋放每個節點的內存 可以把問題簡化成三個小問題 1)判斷一個節點是否是葉子節點 2)刪除一個二叉樹的所有葉子節點 3)不斷的刪除葉子節點,樹就被刪光了 void deleteBSTree(Node *&head) {

原创 面試雜題(四)有序數組中連續k的個數(更高效的方法) .

這是二分搜索的一個應用,找到FirstK以及LastK 代碼比較簡單 int NumofK(int *pData,int nLen,int k) { int nIndexLeft=GetFirstK(pData,nLen,k); if

原创 二叉樹(五)二叉樹中某一路徑之和爲某一整數

思路: 對於二叉樹中的某一節點, 如果是葉子節點,將其加入到path中,(一個vector)然後算vector中的和是否爲需要的整數,如果是就打印出來,如果和不滿足就退出函數,退出前pop vector; 如果不是葉子節點,直接將當前值加

原创 位操作(一)交換兩個數不用中間變量

先來說下異或 1^1=0       1 1 0 0^1=1       0 1 1 1^0=1       1 0 1 0^0=0       0 0 0 簡單的就是相異出一 相同出零 但是還有一個規律  比如第一行中的三個數 1 1

原创 面試雜題(七)二維數組中尋找

bool findNR(int **pArray,int nRowSize,int nColSize,int k) { int nRowIndex=0; int nColIndex=nColSize-1; while(nRowInd

原创 排序算法(六)快速排序

void quickSort(int *pData,int nLow,int nHigh) //遞歸,利用分割的結果,這就是一個不斷利用分割的過程 { if (nLow<nHigh) { int i=partition(pData

原创 數據結構基礎(二)隊列的實現

使用鏈表實現的隊列:typedef struct queueNode { int val; queueNode* next; }Node; class queue { public: queue() { front=NULL;

原创 排序算法(七)基數排序

從低位到高位排序,用hash來實現 #include <iostream> #define N 400 using namespace std; typedef struct Hdata { int data; struct Hda

原创 ACM(一)大數相乘

#include <iostream> using namespace std; void arrayPrint(int *p); void Muli(char *num1,char *num2); int main() { cha

原创 面試雜題(五)從尾到頭打印鏈表

#include <iostream> #include <stack> typedef struct node { int nData; struct node *next; }Node; Node * createLinklist