c++實(shí)現(xiàn)版本層次遍歷功能
采用隊(duì)列實(shí)現(xiàn),BFS,功能:BFS層次遍歷打印、按照節(jié)點(diǎn)將BFS序列化成一個(gè)字符。
#include <iostream> #include <string> #include <queue> using namespace std; struct TreeNode { int val; TreeNode* left; TreeNode* right; TreeNode(int val) : val(val), left(nullptr), right(nullptr) {} }; //迭代打印層次遍歷 void BFSTraverse(TreeNode* root) { queue<TreeNode*> nodeQueue; nodeQueue.push(root);//先把第一個(gè)先放到列表里面 while (!nodeQueue.empty()) { int sz = nodeQueue.size();//這個(gè)是為了一層一層的數(shù)值進(jìn)行處理 for (int i = 0; i < sz; i++) { //那就取出那個(gè)節(jié)點(diǎn)進(jìn)行處理 TreeNode* node = nodeQueue.front(); cout << node->val << ", "; nodeQueue.pop(); if (node->left) { nodeQueue.push(node->left); } if (node->right) { nodeQueue.push(node->right); } } } } //按照節(jié)點(diǎn)進(jìn)行序列化成一個(gè)字符串 string serialByBFS(TreeNode* root) { if (root == nullptr) return "#!"; queue<TreeNode*> nodeQueue; nodeQueue.push(root); string res; while (!nodeQueue.empty()) { int sz = nodeQueue.size(); for (int i = 0; i < sz; i++) { TreeNode* node = nodeQueue.front(); nodeQueue.pop(); if (node) { res = res + std::to_string(node->val) + '!'; nodeQueue.push(node->left); nodeQueue.push(node->right); } else { res = res + "#!"; } } } return res; } int main3() { TreeNode* head = new TreeNode(5); head->left = new TreeNode(3); head->right = new TreeNode(8); head->left->left = new TreeNode(1); head->left->right = new TreeNode(2); head->right->left = new TreeNode(4); head->right->right = new TreeNode(5); head->right->left->left = new TreeNode(6); head->right->right->left = new TreeNode(9); head->right->right->right = new TreeNode(11); cout << "traverse1:"; BFSTraverse(head); cout << "\nserial binary:"; string res = serialByBFS(head); cout << res << endl; return 0; }
ps:下面看下C++層次遍歷
/* * description:層次遍歷 * writeby: nick * date: 2012-10-22 23:56 */ #include <iostream> #include <queue> using namespace std; struct node { int item; node *l, *r; node(int n) { item=n; l=0; r=0; } }; typedef node *link; void traverse(link h, void visit(link)) { queue<link> q; q.push(h); while(!q.empty()) { h = q.front(); q.pop(); visit(h); if(h->l != 0) q.push(h->l); if(h->r !=0) q.push(h->r); } } void visit(link p) { cout << p->item << " "; } int main() { link root = new node(4); root->l = new node(5); root->r = new node(6); root->l->l = new node(7); root->l->r = new node(8); cout << "中文"; traverse(root, visit); return 0; }
到此這篇關(guān)于c++實(shí)現(xiàn)版本層次遍歷功能的文章就介紹到這了,更多相關(guān)c++層次遍歷內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C語(yǔ)言實(shí)現(xiàn)簡(jiǎn)易文本編輯器
這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言實(shí)現(xiàn)簡(jiǎn)易文本編輯器,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-05-05C++實(shí)現(xiàn)基于控制臺(tái)界面的吃豆子游戲
這篇文章主要介紹了C++實(shí)現(xiàn)基于控制臺(tái)界面的吃豆子游戲,實(shí)例分析了吃豆子游戲的原理與C++實(shí)現(xiàn)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-04-04Visual Studio 2019 Professional 激活方法詳解
這篇文章主要介紹了Visual Studio 2019 Professional 激活方法,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-05-05C語(yǔ)言中無(wú)符號(hào)數(shù)和有符號(hào)數(shù)之間的運(yùn)算
C語(yǔ)言中有符號(hào)數(shù)和無(wú)符號(hào)數(shù)進(jìn)行運(yùn)算默認(rèn)會(huì)將有符號(hào)數(shù)看成無(wú)符號(hào)數(shù)進(jìn)行運(yùn)算,其中算術(shù)運(yùn)算默認(rèn)返回?zé)o符號(hào)數(shù),邏輯運(yùn)算當(dāng)然是返回0或1了。下面通過(guò)一個(gè)例子給大家分享C語(yǔ)言中無(wú)符號(hào)數(shù)和有符號(hào)數(shù)之間的運(yùn)算,一起看看吧2017-09-09C++實(shí)現(xiàn)拓?fù)渑判颍ˋOV網(wǎng)絡(luò))
這篇文章主要為大家詳細(xì)介紹了C++實(shí)現(xiàn)拓?fù)渑判?,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-04-04C++基于控制臺(tái)實(shí)現(xiàn)的貪吃蛇小游戲
這篇文章主要介紹了C++基于控制臺(tái)實(shí)現(xiàn)的貪吃蛇小游戲,實(shí)例分析了貪吃蛇游戲的原理與C++實(shí)現(xiàn)技巧,是非常經(jīng)典的游戲算法,需要的朋友可以參考下2015-04-04