資料結構與演算法 樹初步

2021-09-25 01:45:35 字數 2177 閱讀 9723

(線性結構體-其直接前驅與直接後繼只有乙個)

非線性結構:

樹是乙個資料的集合

非空樹:集合中存在大於等於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 所有的子樹也滿足該要求 子樹之間不能有交集 單個節點也是一棵樹 空樹 啥資料都沒有,沒有任何節點 根節點 父節點,子節點,兄弟節點 如果兩個節點的父節點雖不相同,但是它們的父節點處在同一層次上,那麼這兩個節點是兄弟節點 葉子節...