二叉樹類BinaryTree

2021-07-06 03:46:38 字數 3013 閱讀 9401

二叉樹是結點的有限集合, 該集合或者為空集, 或者是由乙個根和兩棵互不相交的稱為該根的左子樹和右子樹的二叉樹組成.

二叉樹可以為空集, 可以有空二叉樹, 也可以有空的左子樹 或/和 又子樹.

二叉樹的性質: 1.第i層至多有2^(i - 1)個結點. 2.高度為h的二叉樹上至多有2*h - 1個結點. 3.包含n個元素的二叉樹高度至少為

>=

log2(n + 1)取整. 3.任意一顆二叉樹中, 若葉結點的個數為n0, 度為2的結點個數為n2, 則必有n0 = n2 + 1. 

樹與二叉樹區別: 1.樹不能為空樹, 二叉樹可以為空. 2.樹的子樹之間是無序的, 其子樹不分次序. 二叉樹中結點的子樹要分左右子樹. 

滿二叉樹: 高度為h的二叉樹恰好有2^h - 1個結點.

完全二叉樹: 一棵二叉樹中, 只有最下面兩層結點的度可以小於2, 並且最下面一層的葉結點集中在靠左的若干位置上.

擴充二叉樹(2 - 樹): 除葉子結點外, 其餘結點都必須有兩個孩子.

二叉樹類部分功能實現**:

[cpp]view plain

copy

#include "iostream"

#include "cstdio"

#include "cstring"

#include "algorithm"

using

namespace

std;  

template

<

class

t>  

struct

btnode  

btnode(const

t& x)   

btnode(const

t& x, btnode* l, btnode* r)   

t element;  

btnode* lchild, rchild;  

};  

template

<

class

t>  

class

binarytree  

~binarytree();  

bool

isempty() 

const

; // 判斷是否為空, 是返回true

void

clear(); 

// 移去所有結點, 成為空二叉樹

bool

root(t& x) 

const

; // 若二叉樹為空, 則x為根的值, 返回true

intsize(); 

// 返回二叉樹結點個數

void

maketree(

const

t& x, binarytree& left, binarytree& right); 

// 構造一顆二叉樹, 根的值為x, left & right為左右子樹

void

breaktree(t& x, binarytree& left, binarytree& right); 

// 拆分二叉樹為三部分, x為根的值, left & right為左右子樹

void

preorder(

void

(*visit)(t& x)); 

// 先序遍歷二叉樹

void

inorder(

void

(*visit)(t& x)); 

// 中序遍歷二叉樹

void

postorder(

void

(*visit)(t& x)); 

// 後序遍歷二叉樹

/* data */

protected

:  btnode* root;  

private

:  void

clear()(btnode* &t);  

void

preorder(

void

(*visit)(t &x), btnode*t);  

void

inorder(

void

(*visit)(t &x), btnode*t);  

void

postorder(

void

(*visit)(t &x), btnode*t);  

};  

template

<

class

t>  

bool

binarytree::root(t &x) 

const

return

false

;  }  

template

<

class

t>  

void

binarytree::maketree(

const

t& x, binarytree& left, binarytree& right)  

template

<

class

t>  

void

binarytree::preorder(

void

(*visit)(t& x))  

template

<

class

t>  

void

binarytree::preorder(

void

(*visit)(t& x), btnode* t)  

}  template

<

class

t>  

intbinarytree::size()  

template

<

class

t>  

intbinarytree::size(btnode*t)    

樹與二叉樹區別: 1.樹不能為空樹, 二叉樹可以為空. 2.樹的子樹之間是無序的, 其子樹不分次序. 二叉樹中結點的子樹要分左右子樹. 

BinaryTree 二叉樹類的實現

二叉樹結點的抽象資料型別 1 template 2class binarytreenode 3 二叉樹結點函式功能實現 1 template 2 binarytreenode binarytreenode 36 template 7 binarytreenode binarytreenode con...

BinaryTree 學習二叉樹的Python庫

原文 python library for learning binary trees 作者 joohwan翻譯 賴信濤責編 仲培藝 學過二叉樹的朋友都有過這樣的經歷 按照二叉樹的資料手動模擬畫出來二叉樹。但是現在,有了binarytree這個庫,你可以不必費這個麻煩了!binarytree是乙個小...

Go語言實現二叉樹(BinaryTree)

二叉樹的操作原理 取第乙個節點為根節點,比根節點小的數放在根節點的左子樹 左節點 比根節點大的數放在根節點的右子數 右節點 取得的時候按照中序遍歷的方式 左 中 右 實現 如下 節點結構體 type node struct 二叉樹結構體 type binarytree struct 查詢時記錄下標 ...