二叉查詢樹的基本操作C 實現

2021-09-29 10:54:39 字數 1238 閱讀 9003

最近在看胡凡的《演算法筆記》,將其中的內容理解了一下,然後進行實現

#include

using

namespace std;

class

node};

//二叉查詢樹的查詢

void

search

(node*root,

int x)

if(root-

>data==x)

else

if(root-

>data>x)

else

}//二叉查詢樹的插入,如果插入的值在二叉查詢樹中查詢失敗,那麼查詢失敗的地方就是插入的地方

void

insert

(node*

&root,

int x)

if(root-

>data==x)

else

if(root-

>data>x)

else

}//二叉查詢樹的建立

node*

creat

(int a,

int n)

return root;

}//二叉查詢樹的刪除,找比根節點小的最大結點(前驅)或者找比根節點大的最小結點(後繼)

node*

findmax

(node*root)

//找根結點的前驅,引數應該傳root->lchild

return root;

}node*

findmin

(node*root)

//找根節點的後繼,引數應該傳root->rchild

return root;

}//刪除以root為根節點的樹中權值為x的結點,但是這種刪除方法有缺陷,會導致左右子樹高度不平衡,最終會使二叉查詢樹退化成一條鏈

void

deletenode

(node*

&root,

int x)

if(root-

>data==x)

//找到欲刪除的結點了

else

if(root-

>lchild!=

nullptr

)//左子樹不為空時

else

//右子樹不為空

}else

if(root-

>data>x)

else

}

二叉查詢樹的基本操作

二叉查詢樹 對於樹中的每個節點x,它的左子樹所有關鍵字小於x的關鍵字,而右子樹的所有關鍵字大於x的關鍵字。二叉查詢樹的平均深度是o logn 二叉查詢樹的刪除操作 如果有乙個兒子,調節父節點指標繞過該節點後被刪除。如果有兩個兒子,用右子樹的最小資料代替該節點的資料,並遞迴地刪除那個節點 現在它是空的...

二叉查詢樹的基本操作與實現(二叉鍊錶實現)

package eureka.server.tree public class binarysearchtreeimplements tree public void setroot binarynoderoot override public string tostring override pu...

二叉排序樹(二叉查詢樹)的基本操作

二叉排序樹的查詢屬於動態查詢的範疇,根據查詢過程中是否對錶進行修改,可以把查詢分為靜態查詢和動態查詢。動態查詢表的特點是 表結構本身是在查詢過程中動態生成的,即對於給定的key值,若表中存在其關鍵字等於key的記錄,則查詢成功並返回,否則插入關鍵字等於key的記錄。二叉排序樹或者是一顆空樹,或者是具...