二叉樹的儲存(輸入一串字元)與遍歷
描述
用連結串列的方式實現二叉樹的儲存和基本操作,包括CreateBinTree()、PreorderTraversal()、InorderTraversal()、PostorderTraversal()等操作。
輸入
ABCDFGI00E00H000000
輸入為一行字元型資料,字元之間無空格,表示二叉樹的層序生成序列,’0’表示空結點。
輸出
ABDFECGHI
DBEFAGHCI
DEFBHGICA
直接用STL的queue模板
#include<iostream>
#include<queue>
using namespace std;
struct TNode {
char Data;
struct TNode* Left;
struct TNode* Right;
};
typedef struct TNode* BinTree;
BinTree CreatBinTree(string s) {
char c;
BinTree BT, T;
queue<BinTree> q;
if (s[0] != '0') {
BT = (BinTree)malloc(sizeof(struct TNode));
BT->Data = s[0];
BT->Left = BT->Right = NULL;
q.push(BT);
}
else
return NULL;
for (int i = 1;i<s.size();i++) {
T = q.front();
q.pop();
c = s[i];
if (c == '0')
T->Left = NULL;
else {
T->Left = (BinTree)malloc(sizeof(struct TNode));
T->Left->Data = c;
T->Left->Left = T->Left->Right = NULL;
q.push(T->Left);
}
i++;
c = s[i];
if (c == '0')
T->Right = NULL;
else {
T->Right = (BinTree)malloc(sizeof(struct TNode));
T->Right->Data = c;
T->Right->Left = T->Right->Right = NULL;
q.push(T->Right);
}
}
return BT;
}
void PreorderTraversal(BinTree BT) {
if (BT) {
cout << BT->Data;
PreorderTraversal(BT->Left);
PreorderTraversal(BT->Right);
}
}
void InorderTraversal(BinTree BT){
if (BT) {
InorderTraversal(BT->Left);
cout << BT->Data;
InorderTraversal(BT->Right);
}
}
void PostorderTraversal(BinTree BT){
if (BT) {
PostorderTraversal(BT->Left);
PostorderTraversal(BT->Right);
cout << BT->Data;
}
}
int main() {
string x;
cin >> x;
BinTree t = CreatBinTree(x);
PreorderTraversal(t);
cout << endl;
InorderTraversal(t);
cout << endl;
PostorderTraversal(t);
return 0;
}
相關文章
- Kotlin 鏈式儲存的二叉樹的建立、遍歷Kotlin二叉樹
- 根據二叉樹的前序遍歷和中序遍歷輸出二叉樹;二叉樹
- 劍指offer:輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建出該二叉樹。二叉樹
- 二叉樹的遍歷二叉樹
- 演算法競賽——樹和圖的儲存與遍歷演算法
- 二叉樹遍歷二叉樹
- 二叉樹---遍歷二叉樹
- 資料結構——樹與二叉樹的遍歷資料結構二叉樹
- 144.二叉樹的前序遍歷145.二叉樹的後序遍歷 94.二叉樹的中序遍歷二叉樹
- 完全二叉樹的遍歷二叉樹
- 玩轉二叉樹(樹的遍歷)二叉樹
- 二叉樹遍歷方法二叉樹
- 二叉樹遍歷 -- JAVA二叉樹Java
- C++樹——遍歷二叉樹C++二叉樹
- 一本正經的聊資料結構(5):二叉樹的儲存結構與遍歷資料結構二叉樹
- WeetCode4 —— 二叉樹遍歷與樹型DP二叉樹
- 二叉樹的按層遍歷二叉樹
- 二叉樹的遍歷實現二叉樹
- 二叉樹的層序遍歷二叉樹
- 二叉樹的遍歷筆記二叉樹筆記
- 二叉樹的建立與遍歷(遞迴實現)二叉樹遞迴
- 【資料結構】二叉樹的建立與遍歷資料結構二叉樹
- 中序線索二叉樹的建立與遍歷二叉樹
- 【LeetCode-二叉樹】二叉樹前序遍歷LeetCode二叉樹
- 6.14-二叉樹遍歷二叉樹
- 二叉樹--後序遍歷二叉樹
- 迴圈遍歷二叉樹二叉樹
- 二叉樹四種遍歷二叉樹
- 二叉樹的遍歷 → 不用遞迴,還能遍歷嗎二叉樹遞迴
- 圖的儲存與遍歷C++實現C++
- 二叉樹遍歷順序與方法小結二叉樹
- 144. 二叉樹的前序遍歷二叉樹
- 二叉樹的遍歷 (迭代法)二叉樹
- 二叉樹的遍歷及應用二叉樹
- 什麼是遍歷二叉樹,JavaScript實現二叉樹的遍歷(遞迴,非遞迴)二叉樹JavaScript遞迴
- 二叉樹遍歷方法總結二叉樹
- 二叉樹排序樹的建立,遍歷和刪除二叉樹排序
- 二叉樹的深度、寬度遍歷及平衡樹二叉樹