二叉樹的基本操作 遞迴實現

2021-08-19 18:14:56 字數 2612 閱讀 2180

1.二叉樹的基本概念

在電腦科學中,二叉樹是每個節點最多有兩個子樹的樹結構。通常子樹被稱作「左子樹」(left subtree)和「右子樹」(right subtree)。二叉樹常被用於實現二叉查詢樹和二叉堆。

二叉樹的每個結點至多只有二棵子樹(不存在度大於2的結點),二叉樹的子樹有左右之分,次序不能顛倒。二叉樹的第i層至多有2^個結點;深度為k的二叉樹至多有2^k-1個結點;對任何一棵二叉樹t,如果其終端結點數為n_0,度為2的結點數為n_2,則n_0=n_2+1。

一棵深度為k,且有2^k-1個節點的二叉樹,稱為滿二叉樹。這種樹的特點是每一層上的節點數都是最大節點數。而在一棵二叉樹中,除最後一層外,若其餘層都是滿的,並且最後一層或者是滿的,或者是在右邊缺少連續若干節點,則此二叉樹為完全二叉樹。具有n個節點的完全二叉樹的深度為log2n+1。深度為k的完全二叉樹,至少有2^(k-1)個節點,至多有2^k-1個節點。

2. 宣告以及標頭檔案

#pragma once

#include

#include

#include

#include

typedef

char bdatatype;

typedef

struct bintreenode bintreenode,*pbintreenode;

void createbintree(pbintreenode* proot, const bdatatype *a, int size, bdatatype invalid);

void preorder(pbintreenode proot);

void inorder(pbintreenode proot);

void backorder(pbintreenode proot);

pbintreenode copybintree(pbintreenode proot);

void destorybintree(pbintreenode *proot);

void testbintree();

void testbintree1();

void testbintree2();

1>二叉樹的建立:

pbintreenode buytreenode(bdatatype x)//建立樹節點

void _createbintree(pbintreenode* proot,const bdatatype *a, int size, int

*index, bdatatype invalid)//輔助函式

}void createbintree(pbintreenode* proot,const bdatatype *a, int size, bdatatype invalid)//建立一顆二叉樹

2>.二叉樹的遍歷:

void preorder(pbintreenode proot)//遞迴實現前序遍歷

void inorder(pbintreenode proot)//遞迴實現中序遍歷

void backorder(pbintreenode proot)//遞迴實現後序遍歷

3>二叉樹的拷貝

pbintreenode copybintree(pbintreenode proot)//二叉樹的拷貝

return pnewroot;

}

4>二叉樹的銷毀

void destorybintree(pbintreenode *proot)//銷毀二叉樹

}

5>一些測試函式:

void testbintree()//二叉樹的建立和遍歷

void testbintree1()//二叉樹的拷貝

void testbintree2()//二叉樹的銷毀

4.程式執行的結果遍歷結果

拷貝結果

銷毀結果

5.小結

二叉樹在計算機程式設計中應用非常廣泛,因此我們要認真學習,後期也會分享一些非遞迴實現二叉樹的方法。

以上就是我對於二叉樹遞迴實現的一些方法,希望可以與廣大程式設計愛好者,一起學習,一起進步。

二叉樹的基本操作實現

二叉樹需要不斷的自己畫圖並且一步一步的跟著程式走才能明白它的原理 二叉樹結點結構定義 binode,bitree 通過前序遍曆法建立一棵二叉樹,其形參使用結點的二級指標。當每個葉結點的左右孩子是 時表示二叉樹建立完成 void createtree bitree t 釋放二叉樹空間 void des...

二叉樹基本操作 二叉樹的建立與遞迴遍歷

建立的二叉樹如下 來構建上圖的二叉樹 詳細 如下 include using namespace std typedef char datatype 二叉樹的左右鏈表示,也叫做二叉鍊錶表示 typedef struct node node typedef node btree btree precr...

遞迴實現二叉樹

二叉樹是一種非線性結構,用途廣泛。二叉樹的每個結點的度都不大於2,所以一般用二叉鍊錶來實現二叉樹。二叉樹可以分為根結點,左子樹和右子樹,左子樹 右子樹依然這麼劃分,所以用遞迴實現二叉樹的邏輯是比較簡單的,只需不斷對子樹進行劃分即可。include include include using name...