資料結構 二叉樹

2021-08-31 01:44:54 字數 2835 閱讀 6634

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!

二叉樹(binarytree)是n(n>=0)個結點的有限集,它或者是空集(n=0),或者由乙個根結點及兩棵互不相交的、分別稱作這個根的左子樹右子樹的二叉樹組成。

性質1二叉樹第i層上的結點數目最多為2i-1(i≥1)。

證明:用數學歸納法證明。

歸納基礎:i=1時,有2i-1=20=1。因為第1層上只有乙個根結點,所以命題成立。

歸納假設:假設對所有的j(1≤jj-1個結點,證明j=i時命題亦成立。

歸納步驟:根據歸納假設,第i-1層上至多有2i-2個結點。由於二叉樹的每個結點至多有兩個孩子,故第i層上的結點數至多是第i-1層上的最大結點數的2倍。即j=i時,該層上至多有2×2i-2=2i-1個結點,故命題成立。

性質2深度為k的二叉樹至多有2k-1個結點(k≥1)。

證明:在具有相同深度的二叉樹中,僅當每一層都含有最大結點數時,其樹中結點數最多。因此利用性質1可得,深度為k的二叉樹的結點數至多為:

20+21+…+2k-1=2k-1

故命題正確。

性質3在任意-棵二叉樹中,若終端結點的個數為n0,度為2的結點數為n2,則n0=n2+1。

證明:因為二叉樹中所有結點的度數均不大於2,所以結點總數(記為n)應等於0度結點數n0、1度結點數n1和2度結點數n2之和,即

n=n0+n1+n2 (式子1)

另一方面,1度結點有乙個孩子,2度結點有兩個孩子,故二叉樹中孩子結點總數是n1+2n2,而樹中只有根結點不是任何結點的孩子,故二叉樹中的結點總數又可表示為

n=n1+2n2+1 (式子2)

由式子1和式子2得到:

n0=n2+1

#include

#define null 0

using

namespace

std;template

t>struct

btnode btnode* copytree()   l = lchild->copytree();  r = rchild->copytree();  n = new btnode(data, l, r);  return n; }};template

t>btnode

::btnode()template

t>class

binarytree  return root; }private: void

preorder

(btnode*r)

; void

inorder

(btnode*r)

; void

postorder

(btnode*r)

; int

height

(const btnode*r)

const

; int

nodecount

(const btnode*r)

const

; void

destroy

(btnode*&r)

;};template

t>binarytree

::binarytree()template

t>binarytree

::~binarytree()template

t>void

binarytree

::pre_order()template

t>void

binarytree

::in_order()template

t>void

binarytree

::post_order()template

t>int

binarytree

::treeheight() consttemplate

t>int

binarytree

::treenodecount() consttemplate

t>void

binarytree

::destroytree()template

t>void

binarytree

::preorder(btnode*r)}template

t>void

binarytree

::inorder(btnode*r)}template

t>void

binarytree

::postorder(btnode*r)}template

t>int

binarytree

::nodecount(const btnode*r) const else }template

t>int

binarytree

::height(const btnode*r) const else }template

t>void

binarytree

::destroy(btnode*&r)}void

main

()// output:

/*pre order: a b d e c fin order: d b e a f cpost order: d e b f c atree height: 2the count of tree nodes: 6*/

給我老師的人工智慧教程打call!

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

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.二叉樹的實現 有兩種實現方式,...