用c 實現乙個二叉排序樹

2021-08-02 18:20:03 字數 2193 閱讀 1350

二叉排序樹又稱二叉查詢樹(binary search tree)。其定義為:二叉排序樹或者收空樹,或者是滿足如下性質的二叉樹。

(1)若它的左子樹非空,則左子樹上所有節點的值均小於根節點的值。

(2)若它的右子樹非空,則右子樹上所有節點的值均大於根節點的值。

(3)左右子樹本身又各是一顆二叉排序樹。

二叉排序樹資料結構如下:

//節點類定義

class

node

; node

(int

num):data(num),parent(null),left(null),right(null){};

}

二叉排序樹類的定義:

class tree

在private中的三個方法主要是為了封裝性的考慮,指標root是私有成員變數,於是在public中使用遞迴方法的三個函式都只能有乙個引數data,然而,這裡只含有乙個引數是無法進行遞迴計算的。因此他們內部呼叫了這三個private中的方法。

接下來說明各個方法的實現。

1,建立二叉排序樹的方法(在建構函式中)

tree::tree(int num,int

len)

};

2,插入節點操作

//以非遞迴的方式

void tree::insertnode1(int data)

}newnode->

parent

=par;

if(par->

data

> newnode->

data)

par->left=newnode;

else

par->right=newnode;

}

它分為以下步驟:

(1)建立節點

(2)查詢新建節點的插入位置

(3)把新建點插入目標節點的正確位置。

insertnode()內部呼叫private函式insertnode(),使用遞迴方式插入。

//插入資料為引數data的節點,呼叫遞迴插入的方法

void tree::insertnode(int data)

}//遞迴插入方法

void tree::insertnode(node* current,int data)

else

insert(current->left,data);

}//如果data大於當前節點,則在右子樹中插入

else

if(data

>current->

data)

else

insertnode(current->right,data);

}return; //data等於當前節點資料時,不插入

}

3,查詢節點

node* tree::searchnode(node* current,int data)

/*如果data大於當前節點,則遞迴搜尋其右子樹*/

else

if(data

>current->

data)

//如果相等,則返回current

return current;

}

4,刪除節點

void tree::deletenode(int data)

}void tree::deletenode(node *current)

//將current父親節點的相應指標置空

if(current->

parent

->

data

>current->

data)

current->

parent

->left=

null;

else

current->

parent

->right=

null;

//最後刪除此節點

delete current;

}

C 實現二叉排序樹

include using namespace std class btreenode 二叉樹的結點類 二叉樹類 class btree 二叉樹類 void build void insert int d,btreenode r,btreenode p else else if d r data e...

C 二叉排序樹

輸入一系列整數,建立二叉排序樹,並進行前序,中序,後序遍歷。輸入第一行包括乙個整數n 1 n 100 接下來的一行包括n個整數。可能有多組測試資料,對於每組資料,將題目所給資料建立乙個二叉排序樹,並對二叉排序樹進行前序 中序和後序遍歷。每種遍歷結果輸出一行。每行最後乙個資料之後有乙個空格。輸入中可能...

二叉排序樹實現(C語言)

include include 定義基本的資料結構和型別預定義 struct treenode typedef struct treenode position typedef struct treenode searchtree typedef int elementtype struct tre...