二叉排序樹又稱二叉查詢樹(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...