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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

信号放大器数据结构_[11/11]数据结构 二叉树应用(树型信号放大器,file transfer,遍历的非递归实现)...

發布時間:2024/9/15 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 信号放大器数据结构_[11/11]数据结构 二叉树应用(树型信号放大器,file transfer,遍历的非递归实现)... 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

樹型分布網絡信號放大器

森林和二叉樹的相互轉換

并查集

例題:File transfer

#include <iostream> using namespace std; //typedef int ElementType; //typedef int SetName; //typedef ElementType SetType[MaxSize]; //找到X所在的集合 int s[10001]; int Find(int X) {if (s[X] < 0) return X;else return s[X] = Find(s[X]); } void f1(int X1, int X2) {if (Find(X1) == Find(X2)) cout << "yes" << endl;else cout << "no" << endl; }void Union(int X1, int X2) {int root1 = Find(X1);//X1的樹根int root2 = Find(X2);if (root1 < root2) {//說明第一個集合里元素個數多s[root1] += s[root2];//cout << "把" << X1 << "的根節點的值修改為" << s[root1] << endl;s[root2] = root1;//cout << "把" << X2 << "的根節點的值修改為" << s[root2] << endl;}if (root1 > root2) {s[root2] += s[root1];//cout << "把" << X2 << "的根節點的值修改為" << s[root2] << endl;s[root1] = root2;//cout << "把" << X1 << "的根節點的值修改為" << s[root1] << endl;} }int GetNum(int n) {int temp = 0;for (int i = 1; i <= n; i++) {if (s[i] <0) temp++;}return temp; }int main() {int N; cin >> N;for (int i = 1; i <= N; i++) s[i] = -1;char choice=NULL;int X1, X2;while (cin >> choice) {switch (choice) {case 'I': {cin >> X1 >> X2;Union(X1, X2);break;}case 'C': {cin >> X1 >> X2;f1(X1, X2);break;}case 'S': {if (GetNum(N) == 1) cout << "The network is connected." << endl;else cout << "There are " << GetNum(N) << " components." << endl;return 0;}}} }

二叉樹遍歷的非遞歸實現

中序遍歷

#include <iostream> #include <stack> #include <list> using namespace std; typedef BinNode* Bintree; //二叉樹 struct BinNode {char data;BinNode* left;BinNode* right; }; //二叉樹節點stack<BinNode>S;//二叉樹堆棧 //中序遍歷 void InOrderTaversal(Bintree BT) {Bintree T = BT;//BT指向樹根while (T || !S.empty()) {while (T) { //其實這是遞歸S.push(*T);T = T->left;}//循環結束說明左邊的樹空了if (!S.empty()) {//一定到達邊界了(T=NULL),可能左樹為空,可能右樹為空//如果左樹為空,只要有節點為空說明可以出棧了*T = S.pop();cout << (*T).data;T = T->right;}} }

先序遍歷

跟中序遍歷差不多,不過要在第一次訪問一個節點的時候就輸出該節點的信息

void PreOrderTaversal(Bintree BT) {Bintree T = BT;//BT指向樹根while (T || !S.empty()) {while (T) { //其實這是遞歸S.push(*T);cout << (*T).data;T = T->left;}//循環結束說明左邊的樹空了if (!S.empty()) {//一定到達邊界了(T=NULL),可能左樹為空,可能右樹為空//如果左樹為空,只要有節點為空說明可以出棧了*T = S.pop();T = T->right;}} }

后序遍歷

stack<BinNode2>s; void postOrder2(BinTree BT) //非遞歸后序遍歷{BinTree T=BT;while(T||!s.empty()){while(T){BinNode2 bn=new BinNode2(T,1);s.push(bn); T=T->left;}if(!s.empty()){BinNode temp=s.pop();if(temp.isfirst){temp.isfirst=0;s.push(temp);T=temp.btnode->right;}else{cout<<temp.btnode->data;T=NULL;}}} }

層序遍歷(使用隊列)

void LevelOrderTraversal(Bintree BT) {Bintree T = BT;list<Bintree>l;l.push_back(T);while (!l.empty()) {*T = l.pop_front();cout << (*T).data;if (T->left) l.push_back(T->left);if (T->right)l.push_back(T->right);} }

總結

以上是生活随笔為你收集整理的信号放大器数据结构_[11/11]数据结构 二叉树应用(树型信号放大器,file transfer,遍历的非递归实现)...的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。