二叉樹的儲存結構及實現

2021-10-01 05:10:27 字數 4318 閱讀 9485

二叉樹的順序儲存結構就是用一維陣列儲存二叉樹中的結點,並且結點的儲存位置(下標)應能體現結點之間的邏輯關係——父子關係。

完全二叉樹和滿二叉樹中結點的序號可以唯一地反映出結點之間的邏輯關係 。

前序遍歷

void

preorder

(int root,

char data)

return

;}

中序遍歷

void

inorder

(int root,

char data)

return

;}

後序遍歷

void

postorder

(int root,

char data)

return

;}

建立二叉樹

void

create

(char preorder,

char inorder,

int start_p,

int end_p,

int start_i,

int end_i,

char data,

int root)

} data[root]

=preorder[start_p]

;create

(preorder,inorder,start_p+

1,start_p+k-start_i,start_i,k-

1,data,

2*root)

;create

(preorder,inorder,start_p+k-start_i+

1,end_p,k+

1,end_i,data,

2*root+1)

;}return

;}

main函式實現

int

main()

基本思想:令二叉樹的每個結點對應乙個鍊錶結點,鍊錶結點除了存放與二叉樹結點有關的資料資訊外,還要設定指示左右孩子的指標。

資料域,存放該結點的資料資訊;

lchild:左指標域,存放指向左孩子的指標;

rchild:右指標域,存放指向右孩子的指標。

template

<

class

t>

struct binode

;

二叉鍊錶儲存結構的宣告

template

<

class

t>

class

bitree

void

inorder()

void

postorder()

void

levelorder()

;private

: binode

*root;

binode

*creat()

;void

release

(binode

*root)

;void

preorder

(binode

*root)

;void

inorder

(binode

*root)

;void

postorder

(binode

*root)

;void

levelorder

(binode

*root);}

;

前序遍歷——遞迴

template

<

class

t>

void bitree::

preorder

(binode

*root)

}

前序遍歷——非遞迴

template

<

class

t>

void bitree::

preorder

(binode

*root)if(

!s.empty()

)}}

中序遍歷——遞迴

template

<

class

t>

void bitree::inorder (binode

*root)

}

中序遍歷——非遞迴

template

<

class

t>

void bitree::inorderwithoutd (binode

*root)if(

!astack.

empty()

)}}

後序遍歷——遞迴

template

<

class

t>

void bitree::

postorder

(binode

*root)

}

後序遍歷——非遞迴

void tree::

t_print

(bnode *bt)

else

}}

按擴充套件前序遍歷序列輸入結點的值

如果輸入結點值為「#」,則建立一棵空的子樹

否則,根結點申請空間,將輸入值寫入資料域中

以相同方法的建立根結點的左子樹

以相同的方法建立根結點的右子樹

遞迴方法

template

<

class

t>

bitree ::

bitree()

template

<

class

t>

binode

* bitree ::

creat()

return root

}

類的宣告

template

<

class

t>

class

bitree

void

inorder()

void

postorder()

void

levelorder()

;private

: binode

*root;

void

creat

(binode

*& root)

;void

release

(binode

*root)

;void

preorder

(binode

*root)

;void

inorder

(binode

*root)

;void

postorder

(binode

*root)

;void

levelorder

(binode

*root);}

;template

<

class

t>

bitree

::bitree()

template

<

class

t>

void bitree

::creat

(binode

*&root )

}template

<

class

t>

void bitree::~

bitree

(binode

* root)

}

二叉樹的儲存結構和實現

一 二叉樹儲存結構分為順序儲存和鏈式儲存 二 二叉樹性質 1 二叉樹第i層上的節點數目最大是2的i 1次方 i 1 2 深度為k的二叉樹節點數目最多為2的k次方再減1 3 在任意乙個二叉樹中,葉子節點 度為0的節點 度為2的節點 1 4 二叉樹的節點的度可以為0,也可以為1,可以為2 二叉樹有兩個特...

二叉樹的儲存結構

二叉樹是非線性結構,即每個資料結點至多只有乙個前驅,但可以有多個後繼。它可採用順序儲存結構和鏈式儲存結構。1 順序儲存結構 二叉樹的順序儲存,就是用一組連續的儲存單元存放二叉樹中的結點。因此,必須把二叉樹的所有結點安排成為乙個恰當的序列,結點在這個序列中的相互位置能反映出結點之間的邏輯關係,用編號的...

二叉樹的儲存結構

二叉樹是非線性結構,即每個資料結點至多只有乙個前驅,但可以有多個後繼。它可採用順序儲存結構和鏈式儲存結構。1 順序儲存結構 二叉樹的順序儲存,就是用一組連續的儲存單元存放二叉樹中的結點。因此,必須把二叉樹的所有結點安排成為乙個恰當的序列,結點在這個序列中的相互位置能反映出結點之間的邏輯關係,用編號的...