(線性結構體-其直接前驅與直接後繼只有乙個)
非線性結構:
樹是乙個資料的集合
非空樹:集合中存在大於等於1的元素,且有且只有乙個根節點 空樹:集合中沒有元素
除了根節點之外,在邏輯上可以認為其它的節點是m棵相互不相交的子樹構成,每一棵子樹又由若干子樹來組成(遞迴性)
度(節點的度,乙個節點所擁有的子節點個數;)(樹的度:在樹中最大的節點的度為樹的度);度為0的節點稱為葉(終端)節點,度不為0的節點叫做分支(非終端)節點
孩子和單親,表示相鄰的兩層;同一層的稱兄弟
祖先和子孫是孩子和單親的延續,表示縱向的次序
節點的層數和樹的高度,預設根節點從0開始,其餘的層數是上一層數+1;樹的高度-樹中節點最大的層數
有序樹(同一層,資料進入的先後次序從左到右有序排列,其次序不可隨意交換)、無序樹(元素大小沒有規律,且可以隨意交換)
m棵互不相交的樹,森林和樹的概念相近,把森林中所有的樹給出的乙個共同的跟節點,則變為樹,把樹的根節點刪除則為森林
任何乙個節點只有乙個直接的前驅,有n個(0-n)直接的後繼
樹中只有根節點是乙個為空的直接前驅,葉節點的後繼值為0;
祖先和子孫定義了一種樹中節點的縱向次序
有序樹中,同一組的兄弟節點從左往右有長幼之分
.h 檔案
#pragma once
template
class cmytree
; treenode *proot;
//根節點指標
public:
cmytree()
;~cmytree()
;void
clear()
; bool find
(t const
& finddata)
;//查詢函式
void
insert
(t const
& insertdata, t const
& finddata, bool ischild = true)
;private:
void
_clear
(treenode *root)
;//輔助清楚的遞迴函式
treenode *
_find
(treenode *root, t const
& finddata);}
;template
cmytree::
cmytree()
template
cmytree::
~cmytree()
template
void cmytree::
clear()
template
bool cmytree::
find
(t const
& finddata)
template
void cmytree::
insert
(t const
& insertdata, t const
& finddata, bool ischild)
else
}else
}else
tempnode->child = tempinsertnode;
tempinsertnode->father = tempnode;}}
else
proot = tempinsertnode;
//表示該樹還是乙個空樹
}template
void cmytree::
_clear
(treenode * root)
}template
treenode * cmytree::
_find
(treenode * root, t const
& finddata)
return nullptr;
}
.cpp主函式檔案
#include
#include
"mytree_list"
using namespace std;
intmain()
資料結構 線段樹初步
眾所周知,線段樹是oi當中十分重要的乙個資料結構,所以我們今天就來講一講這個線段樹。首先,我們來了解一下什麼是線段樹。給定乙個1 n的區間,我們考慮,將這個區間進行二分,使得這個區 間下擁有兩個小區間,如此反覆操作,直至這個區間被二分的只剩下乙個點,那麼這就是這棵線段樹的葉節點,線段樹的實質上是一顆...
大話資料結構與演算法 演算法初步1
什麼是演算法呢?演算法是描述解決問題的方法。如今普遍認可的對演算法的定義是 演算法是解決特定問題求解步驟的描述,在計算機中表現為指令的有限序列,並且每條指令表示乙個或多個操作。對於乙個特定的問題,是可以有多個演算法來解決的。那麼我們就會想,有沒有通用的演算法呀?其實這個問題很弱智,就像問與沒有包治百...
資料結構與演算法 樹
後序遍歷 已知前序和中序求後序 設計 的原則 1 有且僅有乙個根節點 2 所有的子樹也滿足該要求 子樹之間不能有交集 單個節點也是一棵樹 空樹 啥資料都沒有,沒有任何節點 根節點 父節點,子節點,兄弟節點 如果兩個節點的父節點雖不相同,但是它們的父節點處在同一層次上,那麼這兩個節點是兄弟節點 葉子節...