二叉樹的構造與遍歷
本文用於二叉樹的遍歷與構造:
/*
二叉樹的構造及遍歷
遍歷
1
/ \
2 3
/ \ / \
4 5 6 7
/ \ /
8 9 10
先序:
1 根 2 左 3 右 (1,2,3,4,5都是根(父節點))
上述序列:1 2 4 8 9 5 10 3 6 7
中序:
1 左 2 根 3 右
序列:8 4 9 2 10 5 1 6 3 7
後序:
1 左 2 右 3 根
序列:8 9 4 10 5 2 6 7 3 1
*/
//二叉樹鏈式儲存的實現
#include<iostream>
#include<cstring>
#include <vector>
using namespace std;
struct TreeNode
{
char val;
TreeNode *left;
TreeNode *right;
TreeNode(char x) :val(x), left(nullptr), right(nullptr) {}
};
class Tree
{
private:
int n;//用於記錄樹節點的總個數
int n1;//輸入的字元個數
TreeNode *temp[1000];//用於臨時替換的
public:
TreeNode *Root;//根
Tree() //初始化樹
{
TreeNode *p;
char str[1000];
int parent = 1, child = 0;
cout << "請輸入字元(例如1#2#3#4#5):";
cin.getline(str,1000);
n1 = strlen(str);
n = 0;
for (int i = 0; i < n1; i++)
{
if (str[i] != '#')
{
p = nullptr;
n++;
p = new TreeNode(str[i]);
}
child++;
temp[child] = p;
if (child == 1) { Root = p; }
else
{
if ((p != nullptr) && (child % 2 == 0))
{
temp[parent]->left = p;
}
if ((p != nullptr) && (child % 2 == 1))
{
temp[parent]->right = p;
}
if (child % 2 == 1) //in fact, i+1 can replace child
{
parent++;
}
}
}
}
~Tree() //釋放記憶體空間
{
for (int i = 0; i < n1; i++)
{
if (temp[i] != nullptr)
delete temp[i];
}
}
void Num_n()
{
cout << " 該二叉樹的節點個數:" << n << endl;
}
void preor(TreeNode * t) //先序遍歷
{
if (t != nullptr)
{
cout << t->val << ",";
preor(t->left);
preor(t->right);
}
}
void midor(TreeNode * t) //中序遍歷
{
if (t != nullptr)
{
midor(t->left);
cout << t->val << ",";
midor(t->right);
}
}
void posor(TreeNode * t) //後序遍歷
{
if (t != nullptr)
{
posor(t->left);
posor(t->right);
cout << t->val << ",";
}
}
};
int main()
{
Tree tree;
tree.Num_n();
cout << "先序遍歷:";
tree.preor(tree.Root);
cout << endl;
cout << "中序遍歷:";
tree.midor(tree.Root);
cout << endl;
cout << "後序遍歷:";
tree.posor(tree.Root);
cout << endl;
system("pause");
return 0;
}
相關文章
- 線索二叉樹的構造和遍歷二叉樹
- 388,先序遍歷構造二叉樹二叉樹
- 從中序與後序遍歷序列構造二叉樹二叉樹
- 資料結構——樹與二叉樹的遍歷資料結構二叉樹
- 中序線索二叉樹的構造和遍歷二叉樹
- 二叉樹:構造二叉樹(通過前序和中序遍歷)、映象翻轉、層次遍歷二叉樹
- LeetCode-105-從前序與中序遍歷序列構造二叉樹LeetCode二叉樹
- LeetCode 105. 從前序與中序遍歷序列構造二叉樹LeetCode二叉樹
- 【資料結構】二叉樹的建立與遍歷資料結構二叉樹
- LeetCode 105. 從前序與中序遍歷序列構造二叉樹 | PytLeetCode二叉樹
- LeetCode-106-從中序與後序遍歷序列構造二叉樹LeetCode二叉樹
- 二叉樹的遍歷二叉樹
- 二叉樹遍歷二叉樹
- 二叉樹---遍歷二叉樹
- 資料結構 二叉樹遍歷資料結構二叉樹
- 889. 根據前序和後序遍歷構造二叉樹二叉樹
- 144.二叉樹的前序遍歷145.二叉樹的後序遍歷 94.二叉樹的中序遍歷二叉樹
- 106. 從中序與後序遍歷序列構造二叉樹——Java實現二叉樹Java
- 資料結構與演算法-二叉樹遍歷資料結構演算法二叉樹
- 完全二叉樹的遍歷二叉樹
- 玩轉二叉樹(樹的遍歷)二叉樹
- Leetcode 889. 根據前序和後序遍歷構造二叉樹LeetCode二叉樹
- 二叉樹遍歷方法二叉樹
- 二叉樹遍歷 -- JAVA二叉樹Java
- C++樹——遍歷二叉樹C++二叉樹
- 根據二叉樹的前序遍歷和中序遍歷輸出二叉樹;二叉樹
- WeetCode4 —— 二叉樹遍歷與樹型DP二叉樹
- 【根據前序和中序遍歷構造二叉樹】棧+迭代 || 遞迴二叉樹遞迴
- 二叉樹的按層遍歷二叉樹
- 二叉樹的遍歷實現二叉樹
- 二叉樹的層序遍歷二叉樹
- 二叉樹的遍歷筆記二叉樹筆記
- [資料結構] 根據前中後序遍歷中的兩種構造二叉樹資料結構二叉樹
- 二叉樹的建立與遍歷(遞迴實現)二叉樹遞迴
- 中序線索二叉樹的建立與遍歷二叉樹
- 【LeetCode-二叉樹】二叉樹前序遍歷LeetCode二叉樹
- 6.14-二叉樹遍歷二叉樹
- 二叉樹--後序遍歷二叉樹
- 迴圈遍歷二叉樹二叉樹