論 如何畫線索二叉樹[資料結構]
題目描述
1.設一棵二叉樹的先序、中序遍歷序列為:先序遍歷序列,ABDFCEGH、 中序遍歷序列,BFDAGEHC。
求:
(1) 寫出其後序遍歷序列;
(2) 並畫出它的後序線索二叉樹。
具體講解
先畫出遍歷序列,後根據遍歷序列例如ABC,看A的右子樹是否為空,如果為空,則指向B,再看B,如果B的左子樹為空,則指向A,依次類推,均符合這個規律。
當然,我們也可以引入程式碼進行除錯、執行。
#include<stdio.h>
#include<stdlib.h>
#pragma warning(disable:4996)
#define MAXSIZE 100
//*二叉樹資料結構定義*
typedef struct BiTreeNode
{
char data;
struct BiTreeNode* left;
struct BiTreeNode* right;
}BiTreeNode, * BiTree;
//*二叉樹的建立--按照先序方式建立--插入*
void CreateBiTree(BiTree* T)
{
char val;
scanf("%c", &val);
if (val == '#')
*T = NULL; //null表示為空枝
else
{
*T = (BiTree)malloc(sizeof(BiTreeNode));
(*T)->data = val;
CreateBiTree(&(*T)->left);
CreateBiTree(&(*T)->right);
}
}
//*先序遍歷 根左右*
void PreOrderTravel(BiTree T)
{
if (T == NULL)
return;
printf("%c ", T->data);
PreOrderTravel(T->left);
PreOrderTravel(T->right);
}
//*中序遍歷 左根右*
void InOrderTravel(BiTree T)
{
if (T == NULL)
return;
InOrderTravel(T->left);
printf("%c ", T->data);
InOrderTravel(T->right);
}
//*後序遍歷 左右根*
void TailOrderTravel(BiTree T)
{
if (T == NULL)
return;
TailOrderTravel(T->left);
TailOrderTravel(T->right);
printf("%c ", T->data);
}
int main()
{
BiTree T;
T = (BiTree)malloc(sizeof(BiTreeNode));
printf("請給二叉樹按照先序方式依次輸入結點的值(空結點為#):\n");
CreateBiTree(&T);
printf("先序方式遍歷結果:\n");
PreOrderTravel(T);
printf("\n");
printf("中序方式遍歷結果:\n");
InOrderTravel(T);
printf("\n");
printf("後序方式遍歷結果:\n");
TailOrderTravel(T);
printf("\n");
return 0;
}
根據題中所給的先、中序遍歷序列,可得二叉樹的表示為:
若按照先序輸入方式一次輸入節點的值(空結點為#),
則輸入為:
AB#DF###CEG##H###
將該輸入帶程式序除錯、執行,得如下結果。
所以其後序遍歷序列為:
FDBGHECA
根據後序遍歷序列,即可畫出後續線索二叉樹。
答案演示
(1)後序序列:FDBGHECA
(2)
最後的話
作為一個初學者,對於這方面的知識難免不是很牢固。如果有什麼錯誤,還請各位老鐵,能夠指出。
相關文章
- 常用資料結構之線索二叉樹資料結構二叉樹
- java實現-資料結構之二叉樹(三):線索化二叉樹Java資料結構二叉樹
- 【資料結構&演算法】12-線索二叉樹資料結構演算法二叉樹
- 資料結構(樹):二叉樹資料結構二叉樹
- 資料結構 - 二叉樹資料結構二叉樹
- 資料結構-二叉樹資料結構二叉樹
- 13、線索二叉樹二叉樹
- 資料結構之「二叉樹」資料結構二叉樹
- 資料結構-平衡二叉樹資料結構二叉樹
- 線索二叉樹的構造和遍歷二叉樹
- 畫江湖之資料結構【第三話:二叉樹】二茶?資料結構二叉樹
- 畫江湖之資料結構 [第三話:二叉樹] 二茶?資料結構二叉樹
- 資料結構 二叉樹遍歷資料結構二叉樹
- 【資料結構】二叉搜尋樹!!!資料結構
- 資料結構二叉樹學習資料結構二叉樹
- 資料結構-二叉樹、堆、圖資料結構二叉樹
- 資料結構-二叉搜尋樹資料結構
- 資料結構——二叉樹進階資料結構二叉樹
- 資料結構中的樹(二叉樹、二叉搜尋樹、AVL樹)資料結構二叉樹
- 資料結構-線段樹資料結構
- 重學資料結構(六、樹和二叉樹)資料結構二叉樹
- 資料結構——樹與二叉樹的遍歷資料結構二叉樹
- 重學資料結構之樹和二叉樹資料結構二叉樹
- [資料結構] 樹、二叉樹、森林的轉換資料結構二叉樹
- 二叉樹(順序儲存二叉樹,線索化二叉樹)二叉樹
- 資料結構之「二叉搜尋樹」資料結構
- 資料結構☞二叉搜尋樹BST資料結構
- 資料結構之樹( 線段樹,字典樹)資料結構
- 中序線索二叉樹的構造和遍歷二叉樹
- 資料結構 其五 樹與二叉樹學習總結資料結構二叉樹
- 資料結構之樹結構概述(含滿二叉樹、完全二叉樹、平衡二叉樹、二叉搜尋樹、紅黑樹、B-樹、B+樹、B*樹)資料結構二叉樹
- 線索二叉樹【定義、應用、線索化、遍歷】二叉樹
- 資料結構的故事之二叉樹, 字首樹, N叉樹資料結構二叉樹
- 資料結構和演算法:二叉樹資料結構演算法二叉樹
- 【資料結構與演算法】二叉樹資料結構演算法二叉樹
- C#資料結構-二叉樹-順序儲存結構C#資料結構二叉樹
- 線索二叉樹的原理及建立二叉樹
- 資料結構--線段樹合併資料結構