c語言資料結構 中序二叉樹
前言:線索二叉樹主要是為了解決查詢結點的線性前驅與後繼不方便的難題。它只增加了兩個標誌性域,就可以充分利用沒有左或右孩子的結點的左右孩子的儲存空間來存放該結點的線性前驅結點與線性後繼結點。兩個標誌性域所占用的空間是極少的,所有充分利用了二叉鍊錶中空閒存的儲空間。
要實現線索二叉樹,就必須定義二叉鍊錶結點資料結構如下(定義請看**):
left
lefttag
data
righttag
right
說明:1. lefttag=false時,表示left指向該結點的左孩子;
2. lefttag=true時,表示left指向該結點的線性前驅結點;
3. righttag=false時,表示right指向該結點的右孩子;
4. righttag=true時,表示right指向該結點的線性後繼結點;
以二叉鍊錶結點資料結構所構成的二叉鍊錶作為二叉樹程式設計客棧的儲存結構,叫做線索二叉鍊錶;指向結點的線性前驅或者線性後繼結點的指標叫做線索;加上線索的二叉樹稱為線索二叉樹;對二叉樹以某種次序遍歷將其變為線索二叉樹的過程叫做線索化。
中序次序線索化二叉樹演算法:
中序次序線索化是指用二叉鍊錶結點資料結構建立二叉樹的二叉鍊錶,然後按照中序遍歷的方法訪問結點時建立線索;(具體看**)
檢索中序二叉樹某結點的線性前驅結點的演算法:
1.如果該結點的lefttag=true,那麼left就是它的線性前驅;
2.如果該結點的lefttag=false,那麼該結點左子樹最右邊的尾結點就是它的線性前驅點;
(具體請看**)
檢索中序二叉樹某結點的線性後繼結點和演算法:
1.如果該結點的right=true,那麼right就是它的線性後繼結點;
2.如果該結點的right=false,那麼該結點右子樹最左邊的尾結點就是它的線性後繼結點
(具體請看**)
圖:後繼線索
圖:前驅線索
節點定義:
struct node
};類定義:
class binarytree
else return false;
} };
方法定義:
void binarytree::makethread(node* node)
else pre->righttag = false;
} if (node->left==null) // 如果當前結點的左子樹為空, 那麼把當前結點的左子樹用作線索
else node->lefttag = false;
pre = node;
makethread(node->right);
} }
void binarytree::tr**ersebysucce
p = p->right;
} cout
while (p!=hekplnlcyfad)
p = p->left;
} }
cout
head->right = head;
makethread(root);
// 經過了makethread過程之後, pre必然指向中序遍歷最晚的結點.
// 把pre的右子樹指向head, 就構成了乙個雙向迴圈鍊錶
// pre->righttag = 1;
pre->right = head;
pre = null;
node* p = root;
/* * 在建立前驅線索的時候,最左邊的結點沒有和head結點連線。要在這裡補上
*/ while (p->left!=null)
p = p->left;
p->left = head;
} 本文標題: c語言 資料結構之中序二叉樹例項詳解
本文位址:
C語言 資料結構 二叉樹
一 樹的概念及結構 1.樹是一種非線性的資料結構,它是由n n 0 個有限結點組成乙個具有層次關係的集合。把它叫做樹是因為它看起來像一棵倒掛的樹,也就是說它是根朝上,而葉朝下的。它具有以下的特點 每個結點有零個或多個子結點 沒有父結點的結點稱為根結點 每乙個非根結點有且只有乙個父結點 除了根結點外,...
資料結構 二叉樹(c語言)
一下 是二叉樹的相關 包括二叉樹的根據前序遍歷建立二叉樹。根據前序遍歷 中序遍歷與後續遍歷依次查詢二叉樹的各個節點。include 定義二叉樹節點資料型別 typedef struct bitnode bitnode,bitree bitree為指向bitnode這種結構的指標 前序構造二叉樹函式 ...
C語言 資料結構 二叉樹
實驗報告內容 一 實驗目的 要求 1 熟練掌握二叉樹的二叉鍊錶儲存結構的建立 二叉樹的三種遍歷演算法以及基於遍歷的幾種操作的實現。2 編寫適當的主函式和相關函式,使實驗題目執行出正確結果。3 當場程式設計 除錯 編譯。4 程式具有一定的健壯性 可讀性,盡量簡潔。5 程式執行完成後分別存檔,上交實驗報...