日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

二叉搜索树(BFS)总结

發(fā)布時間:2025/3/15 编程问答 46 豆豆
生活随笔 收集整理的這篇文章主要介紹了 二叉搜索树(BFS)总结 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

滿二叉樹

定義:高度為h,并且由2{h} –1個結(jié)點的二叉樹,被稱為滿二叉樹。


完全二叉樹

定義:一棵二叉樹中,只有最下面兩層結(jié)點的度可以小于2,并且最下一層的葉結(jié)點集中在靠左的若干位置上。這樣的二叉樹稱為完全二叉樹。
特點:葉子結(jié)點只能出現(xiàn)在最下層和次下層,且最下層的葉子結(jié)點集中在樹的左部。顯然,一棵滿二叉樹必定是一棵完全二叉樹,而完全二叉樹未必是滿二叉樹。


二叉搜索樹

定義:在二叉搜索樹中,任取一個節(jié)點A,A的值不小于它左子樹上的任何值、它右子樹上的每個值都大于A。

插入節(jié)點、刪除樹

/*二叉搜索樹數(shù)據(jù)類型*/ struct TreeNode {int data;TreeNode* left;TreeNode* right; }; /*向二叉搜索樹中添加一個節(jié)點*/ TreeNode* InsertTree(TreeNode* root, int value){//遞歸調(diào)用,所以要記得返回類型TreeNode* newNode;if(root == nullptr){newNode = new TreeNode;newNode->data = value;newNode->left = nullptr;newNode->right = nullptr;return newNode;}if(value < root->data)root->left = InsertTree(root->left, value);if(value > root->data)root->right = InsertTree(root->right, value);return root; } /*刪除二叉樹*/ void DeleteTree(TreeNode* root){if(root->left != nullptr)DeleteTree(root->left);if(root->right != nullptr)DeleteTree(root->right);delete root;return; }

廣度優(yōu)先遍歷(BFS)

算法流程:
1. 根節(jié)點入隊
2. 循環(huán)判斷當前隊列非空,訪問隊首,出隊
3. 如果左子樹非空,左子樹根節(jié)點入隊
4. 如果右子樹非空,右子樹根節(jié)點入隊
代碼:

vector<int> BFS(TreeNode* root){std::vector<<int> sequence;queue<TreeNode*> q;q.push(root);while(!q.empty()){TreeNode* tmp = q.front();sequence.push_back(tmp->data);q.pop();if(tmp->left != nullptr)q.push(tmp->left);if(tmp->right != nullptr)q.push(tmp->right);}return sequence; }

深度優(yōu)先遍歷(DFS)

深度優(yōu)先遍歷。有四種遍歷方式:先根,后根,左子樹優(yōu)先,右子樹優(yōu)先

(1)先根順序遍歷:a. 訪問根節(jié)點 b. 遍歷左子樹 c. 遍歷右子樹
(2)后根順序遍歷:a. 遍歷左子樹 b. 遍歷右子樹 c. 訪問根節(jié)點
(3)左子樹優(yōu)先遍歷:a. 遍歷左子樹 b. 訪問根節(jié)點 c.遍歷右子樹
(4)右子樹優(yōu)先遍歷:a.遍歷右子樹 b.訪問根節(jié)點 c.遍歷左子樹

/*先根遍歷代碼*/ /*其余遍歷方式相似,調(diào)換訪問順序即可*/ void FLRTraverse(TreeNode *root){printf("%d", root->val); //訪問根節(jié)點if(root->left != NULL)FLRTraverse(root->left); //遍歷左子樹if(root->right != NULL)FLRTraverse(root->right); //遍歷右子樹 }

總結(jié)

以上是生活随笔為你收集整理的二叉搜索树(BFS)总结的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。