二叉樹-排序二叉樹
#include
using namespace std;
二叉樹的節點
date : 資料
left :指向二叉樹的左子樹
right:指向二叉樹的右子樹
template
struct node
template
class btree
public:
btree():root(null),count(null){}
node* & insert(node* &t,const t & e);
node* & sel(node* &t,const t& e);
voiddisplay(node* &t);
int hight(node* t);
boolclear(node* &t);
node* & getroot();
~btree()
this->clear(this->root);
private:
node* root; //根節點指標
intcount;
插入資料
中序遍歷
template
node* &btree::insert(node* &t,const t & e)
if(t==null)
node* p=new node;
p->date=e;
t=p;
count++;
returnt;
else
if(edate) //如果e小於t節點的資料,遞迴往t的左子樹插,反正向右子樹
insert(t->left,e);
else
insert(t->right,e);
查詢元素 e
中序遍歷
template
node* &btree::sel(node* &t,const t& e)
if(t==null)
returnt;
else
if(e==t->date)
returnt;
else
if(edate) //e小於t的資料,則向t的左子樹查詢,反之向t右子樹查詢
sel(t->left,e);
else
sel(t->right,e);
先序遍歷
template
void btree::display(node* &t)
if(t==null)
return;
else
display(t->left);
coutdisplay(t->right);
template
int btree::hight(node*t)
if(t==null)
return0;
else
intlh=hight(t->left);
intrh=hight(t->right);
return1+(lh>rh?lh:rh);
清空二叉樹
後序遍歷
template
bool btree::clear(node*& t)
if(t==null)
returnfalse;
else
clear(t->left);
clear(t->right);
delete t;
t=null;
returntrue;
template
node* &btree::getroot()
returnroot;
int main()
btreet;
t.insert(t.getroot(),50);
t.insert(t.getroot(),40);
t.insert(t.getroot(),45);
t.insert(t.getroot(),60);
t.display(t.getroot());
node* p;
p=t.sel(t.getroot(),45);
cout<<"查詢樹查詢數值:"return0;
二叉樹,排序二叉樹
說到二叉樹,這可是資料結構裡面的非常重要的一種資料結構,二叉樹是樹的一種,本身具有遞迴性質,所以基於二叉樹的一些演算法很容易用遞迴演算法去實現。作為一種非線性結構,比起線性結構還是相對複雜的,很多人甚至看不懂演算法的意思,不能理解。其實一開始接觸這些東西還是挺暈的,不過你多看幾遍,上機實現可能你就會...
排序二叉樹or搜尋二叉樹or查詢二叉樹
排序二叉樹,搜尋二叉樹,查詢二叉樹都是乙個意思,只是叫法不同而已。下面的文章中我們統稱為排序二叉樹。本文主要是針對高中資訊學,因此其中不涉及到指標,所有需要用指標的地方都直接使用陣列進行模擬。排序二叉樹定義 1 若左子樹不空,則左子樹上所有結點的值均小於或等於它的根結點的值 2 若右子樹不空,則右子...
排序二叉樹or搜尋二叉樹or查詢二叉樹
排序二叉樹,搜尋二叉樹,查詢二叉樹都是乙個意思,只是叫法不同而已。下面的文章中我們統稱為排序二叉樹。本文主要是針對高中資訊學,因此其中不涉及到指標,所有需要用指標的地方都直接使用陣列進行模擬。排序二叉樹定義 1 若左子樹不空,則左子樹上所有結點的值均小於或等於它的根結點的值 2 若右子樹不空,則右子...