亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

數據結構之二叉查找樹

2019-11-14 10:04:32
字體:
來源:轉載
供稿:網友

一,今天我們來介紹下二叉查找樹,其定義是這樣子的:

(1)若左子樹不空,則左子樹上所有結點的值均小于或等于它的根結點的值;

(2)若右子樹不空,則右子樹上所有結點的值均大于或等于它的根結點的值;

(3)左、右子樹也分別為二叉排序樹;

樹的定義如下

typedef struct node

{

int         data;

struct node     *parent;

struct node     *left;

struct node     *right;

}Node;

class Tree

{

public:

Tree()

{

m_root = NULL;

}

int insertTree(int x)

{

return insert(m_root, x);

}

Node* findTree(int x)

{

return find(m_root, x);

}

int delTree(int x)

{

return delnode(m_root, x);

}

PRivate:

int insert(Node* &node, int x);

Node* find(Node* node, int x);

int delnode(Node* &node, int x);

private:

Node    *m_root;

};

二,其查找操作是這樣子的:

如果根結點的關鍵字值等于查找的關鍵字,成功。否則,若小于根結點的關鍵字值,遞歸查左子樹。若大于根結點的關鍵字值,遞歸查右子樹。若子樹為空,查找不成功,如在遞歸的過程中遇到與關鍵字值相等的節點那么查找成功。

直接上代碼嘍

Node* Tree::find(Node* node, int x)

{

if(node == NULL)

{

return NULL;

}

if(x<node->data)

{

return find(node->left, x);

}

else if(x>node->data)

{

return find(node->right, x);

}

else

{

return node;

}

}

三,其刪除操作是這樣子的

1,首先查找給定值的節點,如果找不到,那么直接失敗

2,如果查找到的節點的左右子樹均為空,并且父節點也是空,那么直接把這個節點置空就可以了。否則直接把該節點的父節點的左子節點或者右子節點置空

3,如果查找到的節點的左子樹不是空的,但是右子樹不是空的,那么把該節點的左子節點的父節點指向該節點的父節點,(1):該節點的父節點是空的,那么把該樹的根節點指向該節點的左子節點(2):該節點的父節點不是空的,

4,如果查找到的節點的右子樹不是空的,與上述操作3相反

5,如果既有左子節點,又有右子節點,那么先找到其右字數中最小的節點,把最小節點的值復給一個臨時變量,然后遞歸刪除這個最小的節點,刪完自后,把臨時變量賦值給該節點的值就可以了。

上代碼嘍:

int Tree::delnode(Node* &node, int x)

{

int temp;

Node *find_node = findTree(x);

if(!find_node)

{

return -1;

}

else if(find_node->left==NULL && find_node->right==NULL)

{

if(find_node->parent==NULL)

{

cout << "delete root" << endl;

free(find_node);

node=NULL;

}

else

{

cout << "delete root not null" << endl;

if(find_node->parent->left->data == x)

{

find_node->parent->left = NULL;

}

else

{

find_node->parent->right = NULL;

}

}

}else if(find_node->left!=NULL && find_node->right==NULL)

{

cout << "delete left not null" << endl;

find_node->left->parent = find_node->parent;

if(find_node->parent == NULL)

{

node = find_node->left;

}

else

{

find_node->parent->left = find_node->left;

}

ree(find_node);

}

else if(find_node->right!=NULL && find_node->left==NULL)

{

         cout << "delete right not null" << endl;

           find_node->right->parent = find_node->parent;

if(find_node->parent == NULL)

{

node = find_node->right;

}

else 

{

find_node->parent->right = find_node->right;

}

free(find_node);

}

else

{

               Node *p = find_node->right;

while(p->left)

{

p = p->left;

}

int min_data = p->data;

delnode(node, min_data);

find_node->data = min_data;

}

return 0;

}

四,插入操作的步驟:

1,如果根節點為空,那么直接把新的節點賦值給根節點

2,如果值比根節點小,向左遞歸,否則向右遞歸

沒什么好說的,上代碼:

int Tree::insert(Node* &node, int x)

{

if(node == NULL)

{

cout << "insert null" << endl;

Node *p = (Node *)malloc(sizeof(Node));

p->left = NULL;

p->right= NULL;

p->parent = NULL;

p->data = x;

node = p;

return 0;

}

else

{

if(node->left==NULL && x<node->data)

{

Node *p = (Node *)malloc(sizeof(Node));

p->left = NULL;

p->right= NULL;

p->parent = node;

p->data = x;

node->left = p;

return 0;

}

else if(node->right==NULL && x>node->data)

{

Node *p = (Node *)malloc(sizeof(Node));

p->left = NULL;

p->right= NULL;

p->parent = node;

p->data = x;

node->right = p;

return 0;

}

else if(x<node->data)

{

insert(node->left, x);

}

        else if(x>node->data)

{

insert(node->right, x);

}else

{

return -1;

}

}

}

歡迎掃描關注該公眾號 會定期推送一些技術文章


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
午夜精品久久久久久久男人的天堂| 国产成人一区二区三区电影| 亚洲一区二区三区sesese| 欧美多人爱爱视频网站| 国产97在线|日韩| 国产欧美在线观看| 青草青草久热精品视频在线观看| 国产精品成人v| 7m第一福利500精品视频| 日韩一中文字幕| 裸体女人亚洲精品一区| 久久影视免费观看| 中文字幕亚洲欧美在线| 91久久久久久久一区二区| 久久天天躁狠狠躁老女人| 亚洲欧美制服综合另类| www.日韩欧美| 日韩激情av在线播放| 久久久久这里只有精品| 日韩av在线免播放器| 日韩精品免费在线| 国产精品中文字幕在线观看| 欧美综合国产精品久久丁香| 久久亚洲综合国产精品99麻豆精品福利| 欧洲成人性视频| 国产精品久久久久一区二区| 国产欧美 在线欧美| 97精品伊人久久久大香线蕉| 久久人人看视频| 91久久嫩草影院一区二区| 欧美久久精品午夜青青大伊人| 精品亚洲一区二区三区在线播放| 国产精品专区h在线观看| 91在线免费看网站| 欧美午夜精品久久久久久久| 国产一区二区三区直播精品电影| 国产丝袜精品第一页| 亚洲精品理论电影| 成人福利在线视频| 亚洲资源在线看| 久久露脸国产精品| 国产精品都在这里| 亚洲深夜福利网站| 国产香蕉一区二区三区在线视频| 亚洲欧洲日产国产网站| 国产亚洲精品激情久久| 亚洲精品美女久久久| 亚洲免费电影在线观看| 亚洲第一福利视频| 欧美亚洲成人免费| 九色成人免费视频| 亚洲国产精品人人爽夜夜爽| 日韩最新在线视频| 欧美国产亚洲精品久久久8v| 中文字幕日韩精品在线| 91色中文字幕| 欧美极品美女视频网站在线观看免费| 国产午夜精品全部视频播放| 国产不卡av在线| 国产精品久久久久久久天堂| 欧美天天综合色影久久精品| 欧美主播福利视频| 欧美第一淫aaasss性| 日日狠狠久久偷偷四色综合免费| 亚洲国语精品自产拍在线观看| 国产精品偷伦视频免费观看国产| 亚洲欧美999| 日韩欧美aⅴ综合网站发布| 欧美二区在线播放| 欧美成人三级视频网站| 亚洲成avwww人| 亚洲精品自拍偷拍| 亚洲精品国产精品久久清纯直播| 国产香蕉精品视频一区二区三区| 成人综合网网址| 久久久91精品| 疯狂蹂躏欧美一区二区精品| 欧美午夜精品久久久久久久| 日韩精品视频在线免费观看| 中文字幕成人在线| 国内精品久久久久久| 国产欧美日韩精品丝袜高跟鞋| 亚洲人成77777在线观看网| 国内外成人免费激情在线视频| 国产午夜精品全部视频在线播放| 中文字幕欧美精品日韩中文字幕| 成人h猎奇视频网站| 欧美性猛交xxxx黑人猛交| 国产精品久久久久久久久久久不卡| 久久视频在线视频| 亚洲黄色在线观看| 日韩电视剧在线观看免费网站| 国产精品777| 国产美女久久精品香蕉69| 日本三级久久久| 国产精品成人av在线| 中文字幕久热精品视频在线| 欧美成人精品影院| 一本色道久久88综合亚洲精品ⅰ| 国产精品高潮在线| 日本aⅴ大伊香蕉精品视频| 国产精品va在线播放| 欧美大人香蕉在线| 人人澡人人澡人人看欧美| 亚洲欧洲视频在线| 国产一区二区三区精品久久久| 97婷婷涩涩精品一区| 欧美日本在线视频中文字字幕| 成人黄色在线播放| 国产97色在线| 欧美孕妇性xx| 68精品国产免费久久久久久婷婷| 亚洲欧洲日产国码av系列天堂| 亚洲欧美日韩精品| 2024亚洲男人天堂| 国产在线观看不卡| 亚洲精品国产综合久久| 国产欧美在线观看| 色99之美女主播在线视频| 国产成人av网址| 午夜精品久久久久久久久久久久久| 久久影视电视剧免费网站| 欧美性极品xxxx娇小| 日韩精品一区二区视频| 日韩欧美中文字幕在线播放| 亚洲欧美一区二区激情| 欧美久久精品一级黑人c片| 亚洲美女av电影| 国产欧美精品xxxx另类| 性欧美长视频免费观看不卡| 中文字幕少妇一区二区三区| 日韩性xxxx爱| 2020国产精品视频| 亚洲sss综合天堂久久| 亚洲精品按摩视频| 成人xxxxx| 91国自产精品中文字幕亚洲| 视频在线一区二区| 成人免费看片视频| 69久久夜色精品国产7777| 国产日韩欧美电影在线观看| 韩国三级日本三级少妇99| 97视频免费在线观看| 久久久国产一区二区三区| 亚洲天堂av高清| 欧美性xxxx极品hd欧美风情| 91综合免费在线| 亚洲精品久久久久久久久久久久| 亚洲精品国产精品久久清纯直播| 亚洲第一网站男人都懂| 色婷婷**av毛片一区| 中日韩午夜理伦电影免费| 91精品国产高清自在线| 午夜精品福利电影| 亚洲级视频在线观看免费1级| 亚洲精品日韩激情在线电影| 亚洲免费电影一区| 亚洲另类xxxx| 韩剧1988在线观看免费完整版| 日韩日本欧美亚洲| 欧美激情亚洲一区| 欧美制服第一页| 国产在线观看91精品一区| 日本一区二区三区四区视频|