二叉樹的順序儲存和基本操作

2021-08-10 09:59:36 字數 1028 閱讀 2201

一、二叉樹的定義:

二叉樹是n個結點的有限集合,當n=0時稱為空樹,否則:(1)有且只有乙個特殊的被稱為樹的根結點;(2)若n>1時,其餘的結點被分為兩個互不相交的子集,稱為左右子樹,並且左右子樹都是二叉樹;可以看出二叉樹的定義是遞迴的。

二、二叉樹的性質:

(1)在非空二叉樹上,第i層至多有2^(i-1)個結點;

(2)深度為k的二叉樹至多有2^k-1個結點;

(3)對任何乙個二叉樹,若其葉子結點數為n0,度為2的節點數為n2,則n0=n2+1;

滿二叉樹:一課深度為k且有2^k-1個結點的二叉樹。

完全二叉樹:如果深度為k,有n個結點的二叉樹,當且僅當其每乙個結點都與深度為k的滿二叉樹中編號從1到n的結點一一對應,該二叉樹稱為完全二叉樹。2^(k-1)<=n<=2^k-1

(4)n個結點的完全二叉樹的深度k=[log2 n]+1,這裡這個符號[x]表示小於等於x的整數;(證明過程,對上述n的不等式取對數)

(5)若對一棵有n個結點的完全二叉樹(深度為└㏒2n┘+1)的結點按層(從第1層到第㏒2n +1層)序自左至右進行編號,則對於編號為i(1≦i≦n)的結點:

1、若i=1:則結點i是二叉樹的根,無雙親結點;否則,若i>1,則其雙親結點編號是 [i/2]。

2、如果2i>n:則結點i為葉子結點,無左孩子;否則,其左孩子結點編號是2i。

3、如果2i+1>n:則結點i無右孩子;否則,其右孩子結點編號是2i+1。

三、二叉樹的儲存結構

1、順序儲存結構:

typedef char elemtype;

typedef struct stree

stree;

//init

void stree_init(stree &t)

); int p=1,q;

if(stree_empty(t))

{cout<<"tree is empty!"int p=1;

int b=1;

/*if(stree_empty(t))

{cout<<"tree is empty!"<

順序儲存二叉樹

從資料儲存來看,陣列儲存方式和樹的儲存方式可以相互轉換,即陣列可以轉換成樹,樹也可以轉換成陣列,看下面的示意圖。順序二叉樹通常只考慮完全二叉樹 第n個元素的左子節點為 2 n 1 第n個元素的右子節點為 2 n 2 第 n 個元素的父節點為 n 1 2 n 表示二叉樹中的第幾個元素 按 0 開始編號...

順序儲存二叉樹

從資料儲存來看,陣列儲存方式和樹的儲存方式可以相互轉換,即陣列可以轉換成樹,樹也可以轉換成陣列。陣列轉換成樹即是將陣列中的各個元素按照二叉樹的層次儲存起來的過程。原陣列 1,2,3,4,5,6,7 轉換為順序二叉樹如下圖所示 順序儲存二叉樹的特點 通常只考慮完全二叉樹 第n個元素的左子節點為2 n ...

順序儲存二叉樹

package com.datastructure.tree.binarytree 順序儲存二叉樹 1。順序儲存二叉樹通常只考慮完全二叉樹 2。第n個元素的左子節點為2 n 1 3。第n個元素的右子節點為2 n 2 4。第n個元素的父親節點為 n 1 2 public class sequentia...