資料結構 普通二叉樹

2021-08-11 07:35:57 字數 1804 閱讀 8602

1.二叉樹-----普通樹

1.1 二叉樹長什麼樣子

1.1.1 空二叉樹

1.1.2 只有根結點的二叉樹

1.1.3 只有左子樹

1.1.4 只有右子樹

1.1.5 左右子樹都健全

滿二叉樹  除了葉子節點之外,所有節點都是滿的

完全二叉樹  除了最後乙個節點以及葉子節點,剩下的結點要是滿的

1.2 基本概念

1.2.1 根結點

1.2.2 左子樹指標,右子樹指標,左子樹,右子樹

1.2.3 兄弟節點/姊妹節點

1.2.4 雙親結點(存在父子關係)

1.2.5 父節點,和孩子結點

1.2.6 深度和廣度

深度(高度):多少層數--->描述樹 

廣度:多寬,用線的 個數--->描述結點

1.3 一些數學規律

1.3.1 二叉樹有n個結點 n>0; n-1個邊

1.3.2 二叉樹深度(高度) h,h>0 h<=元素個數<=2^h-1

1.3.3 二叉樹結點為n個,n>0,最大深度n,  最小深度  log2(n+1)

1.3.4 二叉樹的編號:  1<=i<=n;

1.3.4.1 i=1 根結點 假設孩子結點的序號是ichild 父節點序號就是ichild/2

1.3.4.2 2i>n 序號為i的結點沒有左孩子

1.3.4.3 2i+1>n  i元素沒有右孩子

2.儲存

3.遍歷

3.1 先序(前序)

根--左--右

3.2 中序

左--根--右

3.3 後序

左--右--根

#include using namespace std;

template struct binarytreenode

binarytreenode(const t& element) :element(element)

binarytreenode(const t& element, binarytreenode* leftchild, binarytreenode* rightchild) };

template void printdata(binarytreenode* x)

template void preorder(binarytreenode* tree)

}template void midorder(binarytreenode* tree)

}template void lastorder(binarytreenode* tree)

}// 求樹的深度

//刪除樹

int main()

{ //普通資料,二叉樹的儲存

binarytreenode*g = new binarytreenode('g');

binarytreenode*f = new binarytreenode('f', nullptr, g);

binarytreenode*e = new binarytreenode('e');

binarytreenode*d = new binarytreenode('d');

binarytreenode*c = new binarytreenode('c', f, nullptr);

binarytreenode*b = new binarytreenode('b', d, e);

binarytreenode*a = new binarytreenode('a', b, c);

cout << "先序遍歷:" << endl;

preorder(a);

cout <

資料結構 二叉樹 反轉二叉樹

include using namespace std define maxsize 1000 struct binary tree node class queue queue queue void queue push binary tree node btn binary tree node ...

《資料結構》 二叉樹

二叉樹 是 n個結點的有限集,它或為空集,或由乙個根結點及兩棵互不相交的 分別稱為該根的左子樹和右子樹的二叉樹組成。二叉樹不是樹的特殊情況,這是兩種不同的資料結構 它與無序樹和度為 2的有序樹不同。二叉樹的性質 1 二叉樹第 i層上的結點數最多為 2 i 1 2 深度為 k的二叉樹至多有 2 k 1...

資料結構 二叉樹

1.二叉樹 二叉樹是一種特殊結構的樹,每個節點中最多有兩個子節點,如圖1所示 圖1 二叉樹 在圖1中的二叉樹裡,a c有兩個子節點,b d有乙個子節點。對於二叉樹還有圖2中的以下情況 圖2 二叉樹的特殊情況 在博文中還介紹了滿二叉樹和完全二叉樹還有其他的特殊二叉樹。2.二叉樹的實現 有兩種實現方式,...