二叉樹初步: 代碼如下,註釋很詳細。 #define _CRT_SECURE_NO_WARNINGS #include <iostream> #include <cstring> #include <stdlib.h> #include <stdio.h> #include <math.h> #in ...
二叉樹初步:
代碼如下,註釋很詳細。
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <cstring>
#include <stdlib.h>
#include <stdio.h>
#include <math.h>
#include <iomanip>
#include <ctype.h>
#include <ctime>
#include <stack>
#include <list>
#include <queue>
#include <algorithm>
using namespace std;
//利用結構體去保存每一個節點的各個數據(節點數據、創建左右節點)
typedef struct treeNode//typedef重命名去簡化每一次創建結構體時的操作
{
char data;//節點數據
struct treeNode* LChild;//創建左子樹
struct treeNode* RChild;//創建右子樹
}TREE,*LPTREE;//將創建結構體命名為TREE,創建結構體指針重命名為LPTREE
//創建新節點的函數。(輸入新節點的數據)
LPTREE creatNode(char data)
{
//malloc()函數分配記憶體空間
//sizeof(LPTREE)大小為LPTREE的記憶體空間
//整個含義:
//分配一個LPTREE類型大小的數據空間給newNode
LPTREE newNode = (LPTREE)malloc(sizeof(TREE));
newNode->data = data;//將新節點的數據輸入
newNode->LChild = NULL;//將左子樹和右子樹初始化為空
newNode->RChild = NULL;
return newNode;//返回數據
}
//插入數據的函數。(完善一個節點左右子樹的信息)-做鏈接
void insertNode(LPTREE parentNode, LPTREE LChild, LPTREE RChild)
{
parentNode->LChild = LChild;//父節點的左邊賦值左節點
parentNode->RChild = RChild;//父節點的右邊賦值右節點
}
//創建一個列印函數
void printCurNodeData(LPTREE curData)
{
cout << curData->data << " ";
}
//遞歸法遍歷
//先序
void preOrder(LPTREE root)//輸入節點
{
if (root != NULL)
{
printCurNodeData(root);//列印根部
preOrder(root->LChild);//遞歸列印左子樹
preOrder(root->RChild);//同上
}
}
//中序
void midOrder(LPTREE root)//輸入節點
{
if (root != NULL)
{
preOrder(root->LChild);//遞歸列印左子樹
printCurNodeData(root);//列印根部
preOrder(root->RChild);//同上
}
}
//後序
void lastOrder(LPTREE root)//輸入節點
{
if (root != NULL)
{
preOrder(root->LChild);//遞歸列印左子樹
preOrder(root->RChild);//同上
printCurNodeData(root);//列印根部
}
}
int main()
{
//創建A-G節點
LPTREE A = creatNode('A');
LPTREE B = creatNode('B');
LPTREE C = creatNode('C');
LPTREE D = creatNode('D');
LPTREE E = creatNode('E');
LPTREE F = creatNode('F');
LPTREE G = creatNode('G');
//建立連接
insertNode(A, B, C);
insertNode(B, D, NULL);
insertNode(D, NULL, G);
insertNode(C, E, F);
cout << "先序遍歷" << endl;
preOrder(A);
cout << endl;
cout << "中序遍歷" << endl;
midOrder(A);
cout << endl;
cout << "後序遍歷" << endl;
lastOrder(A);
cout << endl;
return 0;
}