信号放大器数据结构_[11/11]数据结构 二叉树应用(树型信号放大器,file transfer,遍历的非递归实现)...
生活随笔
收集整理的這篇文章主要介紹了
信号放大器数据结构_[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,遍历的非递归实现)...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mysql %和正则_mysql 正则模
- 下一篇: java 漂亮的连接曲线_猜猜 Java