最近在看胡凡的《演算法筆記》,將其中的內容理解了一下,然後進行實現
#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的記錄。二叉排序樹或者是一顆空樹,或者是具...