輕松搞定面試中的二叉樹題目

版權全部,轉載請注明出處,謝謝!
http://blog.csdn.net/walkinginthewind/article/details/7518888

樹是一種比較重要的數據結構,尤其是二叉樹。二叉樹是一種特殊的樹,在二叉樹中每一個節點最多有兩個子節點,一般稱為左子節點和右子節點(或左孩子和右孩子),而且二叉樹的子樹有左右之分,其次序不能隨意顛倒。二叉樹是遞歸定義的,因此,與二叉樹有關的題目基本都能夠用遞歸思想解決,當然有些題目非遞歸解法也應該掌握,如非遞歸遍歷節點等等。本文努力對二叉樹相關題目做一個較全的整理總結,希望對找工作的同學有所幫助。

二叉樹節點定義例如以下:
struct BinaryTreeNode
{
? ? int m_nValue;
? ? BinaryTreeNode* m_pLeft;
? ? BinaryTreeNode* m_pRight;
};

相關鏈接:
輕松搞定面試中的鏈表題目

題目列表:

1. 求二叉樹中的節點個數
2. 求二叉樹的深度
3. 前序遍歷,中序遍歷,后序遍歷
4.分層遍歷二叉樹(按層次從上往下,從左往右)
5. 將二叉查找樹變為有序的雙向鏈表
6. 求二叉樹第K層的節點個數
7. 求二叉樹中葉子節點的個數
8. 推斷兩棵二叉樹是否結構同樣
9. 推斷二叉樹是不是平衡二叉樹
10. 求二叉樹的鏡像
11. 求二叉樹中兩個節點的最低公共祖先節點
12. 求二叉樹中節點的最大距離
13. 由前序遍歷序列和中序遍歷序列重建二叉樹
14.推斷二叉樹是不是全然二叉樹

具體解答

1. 求二叉樹中的節點個數
遞歸解法:
(1)假設二叉樹為空,節點個數為0
(2)假設二叉樹不為空,二叉樹節點個數 = 左子樹節點個數 + 右子樹節點個數 + 1
參考代碼例如以下:

int GetNodeNum(BinaryTreeNode * pRoot)
{if(pRoot == NULL) // 遞歸出口return 0;return GetNodeNum(pRoot->m_pLeft) + GetNodeNum(pRoot->m_pRight) + 1;
}
2. 求二叉樹的深度
遞歸解法:
(1)假設二叉樹為空,二叉樹的深度為0
(2)假設二叉樹不為空,二叉樹的深度 = max(左子樹深度, 右子樹深度) + 1
參考代碼例如以下:
int GetDepth(BinaryTreeNode * pRoot)
{if(pRoot == NULL) // 遞歸出口return 0;int depthLeft = GetDepth(pRoot->m_pLeft);int depthRight = GetDepth(pRoot->m_pRight);return depthLeft > depthRight ? (depthLeft + 1) : (depthRight + 1); 
}
3. 前序遍歷,中序遍歷,后序遍歷
前序遍歷遞歸解法:
(1)假設二叉樹為空,空操作
(2)假設二叉樹不為空,訪問根節點,前序遍歷左子樹,前序遍歷右子樹
參考代碼例如以下:
void PreOrderTraverse(BinaryTreeNode * pRoot)
{if(pRoot == NULL)return;Visit(pRoot); // 訪問根節點PreOrderTraverse(pRoot->m_pLeft); // 前序遍歷左子樹PreOrderTraverse(pRoot->m_pRight); // 前序遍歷右子樹
}
中序遍歷遞歸解法
(1)假設二叉樹為空,空操作。
(2)假設二叉樹不為空,中序遍歷左子樹,訪問根節點,中序遍歷右子樹
參考代碼例如以下:
void InOrderTraverse(BinaryTreeNode * pRoot)
{if(pRoot == NULL)return;InOrderTraverse(pRoot->m_pLeft); // 中序遍歷左子樹Visit(pRoot); // 訪問根節點InOrderTraverse(pRoot->m_pRight); // 中序遍歷右子樹
}
后序遍歷遞歸解法
(1)假設二叉樹為空,空操作
(2)假設二叉樹不為空,后序遍歷左子樹,后序遍歷右子樹,訪問根節點
參考代碼例如以下:
void PostOrderTraverse(BinaryTreeNode * pRoot)
{if(pRoot == NULL)return;PostOrderTraverse(pRoot->m_pLeft); // 后序遍歷左子樹PostOrderTraverse(pRoot->m_pRight); // 后序遍歷右子樹Visit(pRoot); // 訪問根節點
}

4.分層遍歷二叉樹(按層次從上往下,從左往右)

相當于廣度優先搜索,使用隊列實現。隊列初始化,將根節點壓入隊列。當隊列不為空,進行例如以下操作:彈出一個節點,訪問,若左子節點或右子節點不為空,將其壓入隊列。

void LevelTraverse(BinaryTreeNode * pRoot)
{if(pRoot == NULL)return;queue<BinaryTreeNode *> q;q.push(pRoot);while(!q.empty()){BinaryTreeNode * pNode = q.front();q.pop();Visit(pNode); // 訪問節點if(pNode->m_pLeft != NULL)q.push(pNode->m_pLeft);if(pNode->m_pRight != NULL)q.push(pNode->m_pRight);}return;
}
5. 將二叉查找樹變為有序的雙向鏈表

要求不能創建新節點,僅僅調整指針。
遞歸解法:
(1)假設二叉樹查找樹為空,不須要轉換,相應雙向鏈表的第一個節點是NULL,最后一個節點是NULL
(2)假設二叉查找樹不為空:
假設左子樹為空,相應雙向有序鏈表的第一個節點是根節點,左邊不須要其它操作;
假設左子樹不為空,轉換左子樹,二叉查找樹相應雙向有序鏈表的第一個節點就是左子樹轉換后雙向有序鏈表的第一個節點,同一時候將根節點和左子樹轉換后的雙向有序鏈表的最后一個節點連接;
假設右子樹為空,相應雙向有序鏈表的最后一個節點是根節點,右邊不須要其它操作;
假設右子樹不為空,相應雙向有序鏈表的最后一個節點就是右子樹轉換后雙向有序鏈表的最后一個節點,同一時候將根節點和右子樹轉換后的雙向有序鏈表的第一個節點連接。
參考代碼例如以下:
/******************************************************************************
參數:
pRoot: 二叉查找樹根節點指針
pFirstNode: 轉換后雙向有序鏈表的第一個節點指針
pLastNode: 轉換后雙向有序鏈表的最后一個節點指針
******************************************************************************/
void Convert(BinaryTreeNode * pRoot, BinaryTreeNode * & pFirstNode, BinaryTreeNode * & pLastNode)
{BinaryTreeNode *pFirstLeft, *pLastLeft, * pFirstRight, *pLastRight;if(pRoot == NULL) {pFirstNode = NULL;pLastNode = NULL;return;}if(pRoot->m_pLeft == NULL){// 假設左子樹為空,相應雙向有序鏈表的第一個節點是根節點pFirstNode = pRoot;}else{Convert(pRoot->m_pLeft, pFirstLeft, pLastLeft);// 二叉查找樹相應雙向有序鏈表的第一個節點就是左子樹轉換后雙向有序鏈表的第一個節點pFirstNode = pFirstLeft;// 將根節點和左子樹轉換后的雙向有序鏈表的最后一個節點連接pRoot->m_pLeft = pLastLeft;pLastLeft->m_pRight = pRoot;}if(pRoot->m_pRight == NULL){// 相應雙向有序鏈表的最后一個節點是根節點pLastNode = pRoot;}else{Convert(pRoot->m_pRight, pFirstRight, pLastRight);// 相應雙向有序鏈表的最后一個節點就是右子樹轉換后雙向有序鏈表的最后一個節點pLastNode = pLastRight;// 將根節點和右子樹轉換后的雙向有序鏈表的第一個節點連接pRoot->m_pRight = pFirstRight;pFirstRight->m_pLeft = pRoot;}return;
}
6. 求二叉樹第K層的節點個數
遞歸解法:
(1)假設二叉樹為空或者k<1返回0
(2)假設二叉樹不為空而且k==1,返回1
(3)假設二叉樹不為空且k>1,返回左子樹中k-1層的節點個數與右子樹k-1層節點個數之和
參考代碼例如以下:
int GetNodeNumKthLevel(BinaryTreeNode * pRoot, int k)
{if(pRoot == NULL || k < 1)return 0;if(k == 1)return 1;int numLeft = GetNodeNumKthLevel(pRoot->m_pLeft, k-1); // 左子樹中k-1層的節點個數int numRight = GetNodeNumKthLevel(pRoot->m_pRight, k-1); // 右子樹中k-1層的節點個數return (numLeft + numRight);
}
7. 求二叉樹中葉子節點的個數
遞歸解法:
(1)假設二叉樹為空,返回0
(2)假設二叉樹不為空且左右子樹為空,返回1
(3)假設二叉樹不為空,且左右子樹不同一時候為空,返回左子樹中葉子節點個數加上右子樹中葉子節點個數
參考代碼例如以下:
int GetLeafNodeNum(BinaryTreeNode * pRoot)
{if(pRoot == NULL)return 0;if(pRoot->m_pLeft == NULL && pRoot->m_pRight == NULL)return 1;int numLeft = GetLeafNodeNum(pRoot->m_pLeft); // 左子樹中葉節點的個數int numRight = GetLeafNodeNum(pRoot->m_pRight); // 右子樹中葉節點的個數return (numLeft + numRight);
}
8. 推斷兩棵二叉樹是否結構同樣
不考慮數據內容。結構相允許味著相應的左子樹和相應的右子樹都結構同樣。
遞歸解法:
(1)假設兩棵二叉樹都為空,返回真
(2)假設兩棵二叉樹一棵為空,還有一棵不為空,返回假
(3)假設兩棵二叉樹都不為空,假設相應的左子樹和右子樹都同構返回真,其它返回假
參考代碼例如以下:
bool StructureCmp(BinaryTreeNode * pRoot1, BinaryTreeNode * pRoot2)
{if(pRoot1 == NULL && pRoot2 == NULL) // 都為空,返回真return true;else if(pRoot1 == NULL || pRoot2 == NULL) // 有一個為空,一個不為空,返回假return false;bool resultLeft = StructureCmp(pRoot1->m_pLeft, pRoot2->m_pLeft); // 比較相應左子樹 bool resultRight = StructureCmp(pRoot1->m_pRight, pRoot2->m_pRight); // 比較相應右子樹return (resultLeft && resultRight);
} 
9. 推斷二叉樹是不是平衡二叉樹
遞歸解法:
(1)假設二叉樹為空,返回真
(2)假設二叉樹不為空,假設左子樹和右子樹都是AVL樹而且左子樹和右子樹高度相差不大于1,返回真,其它返回假
參考代碼:
bool IsAVL(BinaryTreeNode * pRoot, int & height)
{if(pRoot == NULL) // 空樹,返回真{height = 0;return true;}int heightLeft;bool resultLeft = IsAVL(pRoot->m_pLeft, heightLeft);int heightRight;bool resultRight = IsAVL(pRoot->m_pRight, heightRight);if(resultLeft && resultRight && abs(heightLeft - heightRight) <= 1) // 左子樹和右子樹都是AVL,而且高度相差不大于1,返回真{height = max(heightLeft, heightRight) + 1;return true;}else{height = max(heightLeft, heightRight) + 1;return false;}
}
10. 求二叉樹的鏡像
遞歸解法:
(1)假設二叉樹為空,返回空
(2)假設二叉樹不為空,求左子樹和右子樹的鏡像,然后交換左子樹和右子樹
參考代碼例如以下:
BinaryTreeNode * Mirror(BinaryTreeNode * pRoot)
{if(pRoot == NULL) // 返回NULLreturn NULL;BinaryTreeNode * pLeft = Mirror(pRoot->m_pLeft); // 求左子樹鏡像BinaryTreeNode * pRight = Mirror(pRoot->m_pRight); // 求右子樹鏡像// 交換左子樹和右子樹pRoot->m_pLeft = pRight;pRoot->m_pRight = pLeft;return pRoot;
}
11. 求二叉樹中兩個節點的最低公共祖先節點
遞歸解法:
(1)假設兩個節點分別在根節點的左子樹和右子樹,則返回根節點
(2)假設兩個節點都在左子樹,則遞歸處理左子樹;假設兩個節點都在右子樹,則遞歸處理右子樹
參考代碼例如以下:
bool FindNode(BinaryTreeNode * pRoot, BinaryTreeNode * pNode)
{if(pRoot == NULL || pNode == NULL)return false;if(pRoot == pNode)return true;bool found = FindNode(pRoot->m_pLeft, pNode);if(!found)found = FindNode(pRoot->m_pRight, pNode);return found;
}BinaryTreeNode * GetLastCommonParent(BinaryTreeNode * pRoot, BinaryTreeNode * pNode1, BinaryTreeNode * pNode2)
{if(FindNode(pRoot->m_pLeft, pNode1)){if(FindNode(pRoot->m_pRight, pNode2))return pRoot;elsereturn GetLastCommonParent(pRoot->m_pLeft, pNode1, pNode2);}else{if(FindNode(pRoot->m_pLeft, pNode2))return pRoot;elsereturn GetLastCommonParent(pRoot->m_pRight, pNode1, pNode2);}
}
遞歸解法效率非常低,有非常多反復的遍歷,以下看一下非遞歸解法。
非遞歸解法:
先求從根節點到兩個節點的路徑,然后再比較相應路徑的節點即可,最后一個同樣的節點也就是他們在二叉樹中的最低公共祖先節點
參考代碼例如以下:
bool GetNodePath(BinaryTreeNode * pRoot, BinaryTreeNode * pNode, list<BinaryTreeNode *> & path)
{if(pRoot == pNode){	path.push_back(pRoot);return true;}if(pRoot == NULL)return false;path.push_back(pRoot);bool found = false;found = GetNodePath(pRoot->m_pLeft, pNode, path);if(!found)found = GetNodePath(pRoot->m_pRight, pNode, path);if(!found)path.pop_back();return found;
}
BinaryTreeNode * GetLastCommonParent(BinaryTreeNode * pRoot, BinaryTreeNode * pNode1, BinaryTreeNode * pNode2)
{if(pRoot == NULL || pNode1 == NULL || pNode2 == NULL)return NULL;list<BinaryTreeNode*> path1;bool bResult1 = GetNodePath(pRoot, pNode1, path1);list<BinaryTreeNode*> path2;bool bResult2 = GetNodePath(pRoot, pNode2, path2);if(!bResult1 || !bResult2) return NULL;BinaryTreeNode * pLast = NULL;list<BinaryTreeNode*>::const_iterator iter1 = path1.begin();list<BinaryTreeNode*>::const_iterator iter2 = path2.begin();while(iter1 != path1.end() && iter2 != path2.end()){if(*iter1 == *iter2)pLast = *iter1;elsebreak;iter1++;iter2++;}return pLast;
}

在上述算法的基礎上稍加變化就可以求二叉樹中隨意兩個節點的距離了。
12. 求二叉樹中節點的最大距離
即二叉樹中相距最遠的兩個節點之間的距離。
遞歸解法:
(1)假設二叉樹為空,返回0,同一時候記錄左子樹和右子樹的深度,都為0
(2)假設二叉樹不為空,最大距離要么是左子樹中的最大距離,要么是右子樹中的最大距離,要么是左子樹節點中到根節點的最大距離+右子樹節點中到根節點的最大距離,同一時候記錄左子樹和右子樹節點中到根節點的最大距離。

參考代碼例如以下:

int GetMaxDistance(BinaryTreeNode * pRoot, int & maxLeft, int & maxRight)
{// maxLeft, 左子樹中的節點距離根節點的最遠距離// maxRight, 右子樹中的節點距離根節點的最遠距離if(pRoot == NULL){maxLeft = 0;maxRight = 0;return 0;}int maxLL, maxLR, maxRL, maxRR;int maxDistLeft, maxDistRight;if(pRoot->m_pLeft != NULL){maxDistLeft = GetMaxDistance(pRoot->m_pLeft, maxLL, maxLR);maxLeft = max(maxLL, maxLR) + 1;}else{maxDistLeft = 0;maxLeft = 0;}if(pRoot->m_pRight != NULL){maxDistRight = GetMaxDistance(pRoot->m_pRight, maxRL, maxRR);maxRight = max(maxRL, maxRR) + 1;}else{maxDistRight = 0;maxRight = 0;}return max(max(maxDistLeft, maxDistRight), maxLeft+maxRight);
}
13. 由前序遍歷序列和中序遍歷序列重建二叉樹
二叉樹前序遍歷序列中,第一個元素總是樹的根節點的值。中序遍歷序列中,左子樹的節點的值位于根節點的值的左邊,右子樹的節點的值位
于根節點的值的右邊。
遞歸解法:
(1)假設前序遍歷為空或中序遍歷為空或節點個數小于等于0,返回NULL。
(2)創建根節點。前序遍歷的第一個數據就是根節點的數據,在中序遍歷中找到根節點的位置,可分別得知左子樹和右子樹的前序和中序遍
歷序列,重建左右子樹。
BinaryTreeNode * RebuildBinaryTree(int* pPreOrder, int* pInOrder, int nodeNum)
{if(pPreOrder == NULL || pInOrder == NULL || nodeNum <= 0)return NULL;BinaryTreeNode * pRoot = new BinaryTreeNode;// 前序遍歷的第一個數據就是根節點數據pRoot->m_nValue = pPreOrder[0];pRoot->m_pLeft = NULL;pRoot->m_pRight = NULL;// 查找根節點在中序遍歷中的位置,中序遍歷中,根節點左邊為左子樹,右邊為右子樹int rootPositionInOrder = -1;for(int i = 0; i < nodeNum; i++)if(pInOrder[i] == pRoot->m_nValue){rootPositionInOrder = i;break;}if(rootPositionInOrder == -1){throw std::exception("Invalid input.");}// 重建左子樹int nodeNumLeft = rootPositionInOrder;int * pPreOrderLeft = pPreOrder + 1;int * pInOrderLeft = pInOrder;pRoot->m_pLeft = RebuildBinaryTree(pPreOrderLeft, pInOrderLeft, nodeNumLeft);// 重建右子樹int nodeNumRight = nodeNum - nodeNumLeft - 1;int * pPreOrderRight = pPreOrder + 1 + nodeNumLeft;int * pInOrderRight = pInOrder + nodeNumLeft + 1;pRoot->m_pRight = RebuildBinaryTree(pPreOrderRight, pInOrderRight, nodeNumRight);return pRoot;
}
相同,有中序遍歷序列和后序遍歷序列,類似的方法可重建二叉樹,但前序遍歷序列和后序遍歷序列不同恢復一棵二叉樹,證明略。
14.推斷二叉樹是不是全然二叉樹
若設二叉樹的深度為h,除第 h 層外,其他各層 (1~h-1) 的結點數都達到最大個數,第 h 層全部的結點都連續集中在最左邊,這就是全然
二叉樹。
有例如以下算法,按層次(從上到下,從左到右)遍歷二叉樹,當遇到一個節點的左子樹為空時,則該節點右子樹必須為空,且后面遍歷的節點左
右子樹都必須為空,否則不是全然二叉樹。
bool IsCompleteBinaryTree(BinaryTreeNode * pRoot)
{if(pRoot == NULL)return false;queue<BinaryTreeNode *> q;q.push(pRoot);bool mustHaveNoChild = false;bool result = true;while(!q.empty()){BinaryTreeNode * pNode = q.front();q.pop();if(mustHaveNoChild) // 已經出現了有空子樹的節點了,后面出現的必須為葉節點(左右子樹都為空){if(pNode->m_pLeft != NULL || pNode->m_pRight != NULL){result = false;break;}}else{if(pNode->m_pLeft != NULL && pNode->m_pRight != NULL){q.push(pNode->m_pLeft);q.push(pNode->m_pRight);}else if(pNode->m_pLeft != NULL && pNode->m_pRight == NULL){mustHaveNoChild = true;q.push(pNode->m_pLeft);}else if(pNode->m_pLeft == NULL && pNode->m_pRight != NULL){result = false;break;}else{mustHaveNoChild = true;}}}return result;
}


轉載于:https://www.cnblogs.com/hrhguanli/p/3910334.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/258287.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/258287.shtml
英文地址,請注明出處:http://en.pswp.cn/news/258287.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

李倩星r語言實戰_《基于R的統計分析與數據挖掘》教學大綱

《基于R的統計分析與數據挖掘》課程教學大綱課程代碼&#xff1a;090542009課程英文名稱&#xff1a;R Language and Data Mining課程總學時&#xff1a;32講課&#xff1a;32實驗&#xff1a;0上機&#xff1a;0適用專業&#xff1a;應用統計學大綱編寫(修訂)時間&#xff1a;…

自動化測試小結

最近差不多一年從事自動化的測試工作&#xff0c;從開始對自動化一點都不了解到現在能從實現用例、手動命令行執行用例、自制工具來執行用例&#xff0c;感覺進步還是有的。 自動化測試對于手動測試應該是有不小的優勢的&#xff0c;雖然在自動化的用例實現中剛開始的時候會顯得…

python地理可視化_【Python教程】地理可視化之二

Basemap是Matplotlib的一個子包&#xff0c;負責地圖繪制。昨天的推送對如何繪制風向圖進行了描述&#xff0c;本文再次利用該包簡單介紹如何繪制海洋及海冰溫度彩色圖示&#xff0c;該圖常見于NOAA官網。具體操作如下&#xff1a;導入命令1)設置工作環境并導入程序包%cd "…

尋找白板上的便簽條

問題來源&#xff1a;http://answers.opencv.org/question/162480/contour-detection-for-gray-stickers-on-white-background/ 題目的大概意思就是這樣的白板&#xff0c;尋找上面的各種便簽條。我找到了橘色的&#xff0c;結果是這樣代碼是這樣Mat src imread("gray-st…

LeetCode Permutations

原題鏈接在這里&#xff1a;https://leetcode.com/problems/permutations/ 題目&#xff1a; Given a collection of distinct numbers, return all possible permutations. For example,[1,2,3] have the following permutations:[1,2,3], [1,3,2], [2,1,3], [2,3,1], [3,1,2]…

去除內存上的警告,避免程序崩掉

# pragma clang diagnostic push # pragma clang diagnostic ignored "-Warc-performSelector-leaks" [self performSelector:callFunc withObject:array[1]]; # pragma clang diagnostic pop 使用原理&#xff1a;將出現警告的代碼加入內存棧中轉載于:https://www.c…

opengl2 vtk 編譯_編譯和使用VTK時值得注意的點(待續)

最近的一個項目中需要使用VTK&#xff0c;于是開始了VTK的漫漫編譯之路。長篇大論的編譯步驟網上數不勝數&#xff0c;在這里不再細說&#xff0c;可自行google。這里主要說一些在編譯過程中需要注意的地方&#xff0c;以免走歪路。1、使用cmake進行第一次configure的時候需要選…

gg

轉載于:https://www.cnblogs.com/lyzuikeai/p/7091206.html

二:Go編程語言規范-類型

1.類型 布爾值&#xff0c;數值與字符串類型的實例的命名是預聲明的。 數組&#xff0c;結構&#xff0c;指針&#xff0c;函數&#xff0c;接口&#xff0c;切片&#xff0c;映射和信道這些復合類型可由類型字面構造。 每個類型 T 都有一個 基本類型&#xff1a;若 T 為預聲明…

HDU 1728 逃離迷宮

這道題做的我想哭啊。。WA了將近十次了吧 一開始我用數組模擬的隊列&#xff0c;后來和老大代碼對拍&#xff0c;感覺改的是基本都一模一樣了&#xff0c;還是WA 實在沒有辦法了&#xff0c;改用queue了 題目里的x是列y是行&#xff0c;和代碼里的反過來的&#xff0c;要注意&a…

Nginx(六)-- 配置文件之Gzip

1.概念及作用 Gizp主要對內容、靜態文件做壓縮&#xff0c;用來提升網站訪問速度&#xff0c;節省帶寬。 2.使用方法 gzip既可以配置在server中&#xff0c;也可以配置在server外&#xff0c;此處配置在server中&#xff0c;如下&#xff1a; 說明&#xff1a;  gizp on|off 是…

誤碼率越高越好還是越低越好_夜間護理步驟越多越好還是越少越好?NFF

現在很多人都知道了夜晚是護膚的黃金護膚時間&#xff0c;有些很聰明的姐妹就從夜晚著手&#xff0c;使用很多種護膚品&#xff0c;希望達到事半功倍的效果&#xff0c;但好皮膚不常有&#xff0c;皮膚問題卻常有&#xff01;既然如此&#xff0c;不少人就問了&#xff0c;夜間…

【隨機森林】random forests 簡單介紹

Random Forest&#xff0c;顧名思義 Random 就是隨機抽取&#xff1b; Forest 就是說這里不止一棵樹&#xff0c;而由 一群決策樹組成的一片森林 &#xff0c;連起來就是用隨機抽取的方法訓練出一群決策樹來完成分類任務。RF用了兩次隨機抽取, 一次是對訓練樣本的隨機抽取; 另一…

側邊工具開發2

1.使用圖片的形式會出現大量的圖片&#xff0c;影響性能&#xff0c;而且不易修改&#xff0c;所有使用圖標加文字的形式進行 <a href"javacript:;" class"toolbar-item"><span class"toolbar-btn"><i class"toolbar-icon&q…

斐波那契?

斐波那契&#xff1f; Time Limit: 1000ms Memory limit: 32768K 有疑問&#xff1f;點這里^_^ 題目描述 給出一個數列的遞推公式&#xff0c;希望你能計算出該數列的第N個數。遞推公式如下&#xff1a; F(n)F(n-1)F(n-2)-F(n-3). 其中&#xff0c;F(1)2, F(2)3, F(3)5. 很熟…

clustalw序列比對_序列比對之Clustalx與Clustalw使用指南

相關專題這幾天實驗需要做多序列比對&#xff0c;很久不做了&#xff0c;一時之間不知道如何使用clustal這個工具了。在網上搜集了一些資料&#xff0c;做個整理&#xff0c;總結了Clustalx和Clustalw的使用&#xff0c;省得以后久不使用又生疏了&#xff0c;又要去整理了&…

信息安全系統設計基礎第三周學習總結—20135227黃曉妍

一.Vim編輯器 1.Vim的六種模式 2.Vim三種常用模式的使用方式&#xff0c;以及三者的切換。打開Vim即默認進入普通模式&#xff0c;按i進入插入模式&#xff0c;按esc從插入模式退出普通模式&#xff0c;再按&#xff1a;進入命令行模式。 普通模式下游標的移動 按鍵 說明 h …

關于指定日期的獲取

java使用Calendar類獲得指定日期 關于指定日期的獲取&#xff0c;是根據指定日期和當前日期相差的天數&#xff0c;然后使用set方法設置Calendar.DAY_OF_MONTH的值。Calendar cal Calendar.getInstance();cal.set(Calendar.DAY_OF_MONTH, cal.get(Calendar.DAY_OF_MONTH) - da…

nodejs的package.json依賴dependencies中 ^ 和 ~ 的區別

nodejs的package.json定義了一個模塊&#xff0c;包括其依賴關系的一個簡單的JSON文件&#xff0c;該文件可以包含多個不同的指令來告訴Node包管理器如何處理模塊。 dependencies則表示此模塊依賴的模塊和版本&#xff0c;其中常常可以看到類似 ^1.2.0 或 ~1.2.0 這樣的版本范圍…

腳本命令_SAP HANA數據庫備份命令腳本

需求場景&#xff1a;HANA數據庫版本 2.044 &#xff0c; SYSTEMDB庫1個&#xff0c;Tenant庫有3個 PRD、POP、HAP需要用命令行備份。備份原理說明&#xff1a;1、腳本同hana studio 一樣&#xff0c;用SYSTEM用戶去備份所有的數據庫。2、備份腳本工作在數據庫管理員用戶下&…