資料結構 筆記:二叉樹的深層特性
性質1
-在二叉樹的第i層最多有個2^(i-1)個結點。(i>=1)
性質2
高度為k的二叉樹最多有2^k-1個結點。(k>=0)
性質3
對任何一棵二叉樹,如果其葉節點有N0個,度為2的非葉節點有n2個,則有n0 = n2 + 1.
性質4
具有n個結點的完全二叉樹的高度為log2n+1
性質5
一棵有n個結點的二叉樹(高度為log2n+1),按層次對結點進行編號(從上到下,從左到右),對任意結點i有:
·如果i =1 ,則結點i是二叉樹的根
·如果i>1,則其雙親結點為i/2
·如果2i <= n,則結點i的做孩子為2i
·如果2i > n,則結點i無做孩子
·如果2i + 1 <= n,則結點i的右孩子為2i+1
·如果2i+1>n,則結點i無右孩子
相關推薦
資料結構 筆記:二叉樹的深層特性
性質1 -在二叉樹的第i層最多有個2^(i-1)個結點。(i>=1) 性質2 高度為k的二叉樹最多有2^k-1個結點。(k>=0) 性質3 對任何一棵二叉樹,如果其葉節點有N0個,度為2的非葉節點有n2個,則有n0 = n2 + 1. 性質4 具有n個結點的完
資料結構 筆記:二叉樹的儲存結構設計
設計要點 -BTree為二叉樹結構,每個結點最多隻有兩個後繼結點 -BTreeNode只包含4個固定的共有成員(哪4個?) -實現樹結構的所有操作(增,刪,查,等) BTreeNode的設計與實現 template <typename T> class BTreeNo
資料結構 筆記:二叉樹結構的層次遍歷
二叉樹的遍歷 -二叉樹的遍歷(Traversing Binay Tree)是指從根節點觸發,按照某種次序一次訪問二叉樹中的所有結點,使得每個結點被訪問一次,且僅被訪問一次。 通用樹結構的層次遍歷演算法是否可以用在二叉樹結構上? 如果可以,程式碼需要做怎樣的改動? 提供一組遍歷相關的函
資料結構 筆記:二叉樹中屬性操作的實現
二叉樹的屬性操作 count() = 10; height() = 4; degree() = 2; 二叉樹結點的數目 -定義功能:count(node) ·在node為根結點的二叉樹中統計結點數目 int count(BTreeNode<T>* nod
資料結構 筆記:二叉樹中的結點刪除與清除
刪除的方式 -基於資料元素值的刪除 ·SharedPointer<Tree<T>>remove(const T& value) -基於結點的刪除 ·SharedPointer<Tree <T>>remove(TreeNode&l
資料結構 筆記:二叉樹中的結點插入操作
是否能夠在二叉樹的而已結點出插入子結點? -不能,二叉樹結點的每個結點的子結點是固定的,只存在左孩子和右孩子. 是否需要指定新資料元素(新結點)的插入位置? -需要指定為左孩子或者右孩子 enum BTNodePos { ANY, LEFT, RIGHT };
資料結構 筆記:二叉樹中的結點查詢操作
查詢的方式 -基於資料元素值的查詢 ·BTreeNode<T>* find(const T& value) const -基於結點的查詢 ·BTreeNode<T>* find(TreeNode<T>* node) const 基於資料
資料結構 筆記:二叉樹的比較與相加
二叉樹的克隆操作 -SharedPointer<BTree<T>> clone() const ·克隆當前樹的一份拷貝 ·返回值為堆空間中的一棵新二叉樹(與當前樹相等) 二叉樹的克隆 -定義功能:clone(node) ·拷貝node為根節點的二叉樹(
資料結構 筆記:二叉樹的典型遍歷方式
二叉樹是否只有一種遍歷方式(層次遍歷)? 典型的二叉樹遍歷方式 -先序遍歷(Pre-Order Traversal) -中序遍歷(In-Order Traversal) -後序遍歷(Post-Order Traversal) 先序遍歷(Pre-Order Traversal)
資料結構六:二叉樹的先序建樹與中序的非遞迴遍歷演算法
熟悉二叉樹的遍歷建樹過程有利於對後文線索化二叉樹的學習 對於資料結構中二叉樹特殊的結構,經過一段時間的溫習發現自己基礎並不是很牢靠,所以寫下這篇博文也是記錄一下自己
資料結構作業:二叉排序樹及其相關操作
寫了一個簡單的。 因為自己對泛型瞭解的還是不夠到位,所以只能寫個demo版的。 這課樹沒辦法維持平衡,希望以後學一下紅黑樹,替罪羊樹etc. /* * 簡單的二叉查詢樹 * 沒有自帶旋轉平衡 * 寫完這個我學一下 * avl樹還有紅黑樹 */ public c
資料結構實驗之二叉樹六:哈夫曼編碼(SDUT 3345)
題解:離散中的“最小生成樹(最優樹)”。 #include <bits/stdc++.h> using namespace std; void qusort(int l, int r, int a[]) { int x = a[l]; int i = l, j =
資料結構實驗之二叉樹一:樹的同構 (SDUT 3340)
題解:把原本結構體的左右子樹的型別定義成 int 型,用來存放這個結點的左右子樹的編號,分別建造兩棵二叉樹,按個比較,如果在第二棵樹中沒有找到,那麼就不用在判斷了。 #include <bits/stdc++.h> using namespace std; struct node
資料結構實驗之二叉樹八:(中序後序)求二叉樹的深度(SDUT 2804)
#include <stdio.h> #include <stdlib.h> #include <string.h> struct node { char data ; struct node *l,*r; }; struct node *cr
資料結構實驗之二叉樹七:葉子問題(SDUT 3346)
#include <bits/stdc++.h> using namespace std; struct node { char data; struct node *lc, *rc; }; char a[100]; int num = 0; struct node
資料結構實驗之二叉樹四:(先序中序)還原二叉樹 (SDUT 3343)
#include <bits/stdc++.h> using namespace std; struct node { char data; struct node *lc, *rc; }; char a[100],b[100]; int n; struct node
資料結構實驗之二叉樹五:層序遍歷 (SDUT 3344)
#include <bits/stdc++.h> using namespace std; struct node { char data; struct node *lc, *rc; }; char s[505]; int num; struct node *cre
資料結構實驗之二叉樹三:統計葉子數 SDUT 3342
#include <stdio.h> #include <string.h> struct node { char data; struct node *l,*r; }; struct node *root; char st[51]; int i; in
資料結構實驗之二叉樹二:遍歷二叉樹 SDUT 3341
#include <bits/stdc++.h> using namespace std; struct Tree { char data; struct Tree *right; struct Tree *left; }; char str[55]; in
【二叉樹】SDUT 3342 資料結構實驗之二叉樹三:統計葉子數
Problem Description 已知二叉樹的一個按先序遍歷輸入的字元序列,如abc,,de,g,,f,,, (其中,表示空結點)。請建立二叉樹並求二叉樹的葉子結點個數。 Input 連續輸入多組資料,每組資料輸入一個長度小於50個字元的字串。 Output 輸出