二叉樹在我之前資料結構課程中學過,但很不系統甚至已經忘乾淨了。這次吳永輝教授暑假訓練計畫中有很多關於二叉樹的訓練,讓我重新學習二叉樹。希望通過這次學習,能對二叉樹有更深的、系統的理解。二叉樹有一般二叉樹、完全二叉樹、滿二叉樹、線索二叉樹、霍爾曼數、二叉排序樹、平衡二叉樹、紅黑樹、b樹。
二叉樹是一種樹形結構的乙個重要型別。一般樹可以轉化為二叉樹,並且二叉樹的儲存結構和演算法都較為簡單,因此二叉樹很重要。二叉樹的特點是每個節點最多只有兩棵子樹,並且有左右之分。參考
參考參考
二叉樹是指樹中節點的度不大於2的有序樹,它是一種簡單而最重要的樹。二叉樹遞迴定義為:二叉樹是一棵空樹,或者是一棵由乙個根結點和兩棵互不相交的,分別稱為根的左子樹和右子樹組成的非空樹;左子樹和右子樹同樣是二叉樹。
空二叉樹、只有乙個根結點的二叉樹、只有左子樹、只有右子樹、滿二叉樹
度:結點擁有子樹的數目結點關係:
(1)結點子樹的根結點為該結點的孩子結點,該結點被孩子結點稱為雙親結點
(2)同乙個雙親結點的孩子結點之間互稱兄弟結點
結點層次:從根開始定義,根為第一層,根的孩子為第二層,依次類推
樹的深度或高度:樹中結點最大層次
在第i層上最多有2 ^ (i-1)個結點 ( i >= 1 )如果二叉樹深度為k,那麼一共最多有2 ^ k -1個結點,( k >= 1 )
n0=n2+1,n0表示度數為0的結點數,n2表示 度數為2的結點數
按一定的規則和順序走遍二叉樹的所有結點,使每個結點都被訪問,且僅訪問一次。實質是將二叉樹的各個結點轉化成乙個線性序列來表示。分為:前序遍歷、中序遍歷、後序遍歷、層序遍歷。
#include
#include
using
namespace std;
typedef
struct node node;
void
preorder
(node* node)
return;}
void
inorder
(node* node)
}void
postorder
(node*node)
}int
main()
根結點——>左子樹——>右子樹
#include
#include
using
namespace std;
typedef
struct node node;
void
preorder
(node* node)
return;}
intmain()
左子樹——>根結點——>右子樹
void
inorder
(node* node)
}
左子樹——>右子樹——>根結點
void
postorder
(node*node)
}
二叉樹基礎
二叉樹 二叉樹是一棵特殊的樹,二叉樹每個節點最多有兩個孩子結點,分別稱為左孩子和右孩子。二叉樹節點結構 二叉樹的建立 node createtree const t a,size t size,size t index,const t invilid return root 返回根節點 前序遍歷 前...
二叉樹基礎
最近學習的一些筆記,記錄一下 樹是一種非線性結構,樹 這種資料結構真的很像我們現實生活中的 樹 這裡面每個元素我們叫 節點 例如下面這幅圖,a 節點就是 b 節點的父節點,b 節點是 a 節點的子節點。b c d 這三個節點的父節點是同乙個節點,所以它們之間互稱為兄弟節點。我們把沒有父節點的節點叫作...
二叉樹基礎
1.二叉樹的定義 每個結點最多只有兩棵子樹 子樹左右有順序之分 2.常見的二叉樹型別 滿二叉樹 看起來 完美 而又 平衡 的樹 完全二叉樹 首先從上至下,從左至右按順序給結點編號,再從下至上,從右至左按順序刪除結點。由此可見滿二叉樹是一棵特殊的完全二叉樹,而完全二叉樹是 缺胳膊少腿 的滿二叉樹。3....