二叉搜尋樹的基本操作 結合LeetCode 例題

2021-10-09 23:41:03 字數 1938 閱讀 4617

目錄

插入節點(也可以看做建樹的過程)

中序遍歷 查詢

查詢最大值、最小值 刪除

全部**:

遞迴的插入,如果當前節點大於插入的x,就往左走;反之小於就往右走;

遞迴出口就是走到了乙個null,在此建立節點即可。

//插入節點(也可以看做建樹的過程) 

void insert(node* &t, int x)

if (x < t->val) insert(t->left,x);

else insert(t->right,x);

}

二叉搜尋樹的中序遍歷是公升序 ,這個性質可以用來判斷一棵樹是否為二叉搜尋樹。

leetcode 98題:

//二叉搜尋樹的中序遍歷是公升序 

void inorder(node* t)

//查詢值為x的節點,若x存在,返回節點指標,不存在返回null。 

node* find(node* t,int x)

最大值就是有右孩子就一直往右走,直到盡頭;

最小值就是有左孩子就一直往左走,直到盡頭。

//尋找以t為根的最大節點

node* find_max(node* t)

//尋找以t為根的最小節點

node* find_min(node* t)

普通二叉樹的刪除操作是沒什麼意義的,在二叉搜尋樹中作刪除操作,要保證二叉搜尋樹的性質不能變,較為複雜。

更詳細的解釋:刪除二叉搜尋樹中的節點【leetcode 450】(兩種方法的實現與比較)

//刪除root中的key元素,返回根 

node* deletenode(node* root, int key)

}if (root->val > key) root->left=deletenode(root->left, key); //往左找

if (root->val < key) root->right=deletenode(root->right, key); //往右找

return root; //返回根

}

#includeusing namespace std;

struct node;

//插入節點(也可以看做建樹的過程)

void insert(node* &t, int x)

if (x < t->val) insert(t->left,x);

else insert(t->right,x);

}//二叉搜尋樹的中序遍歷是公升序

void inorder(node* t)

//查詢值為x的節點,若x存在,返回節點指標,不存在返回null。

node* find(node* t,int x)

//尋找以t為根的最大節點

node* find_max(node* t)

//尋找以t為根的最小節點

node* find_min(node* t)

//刪除root中的key元素,返回根

node* deletenode(node* root, int key)

}if (root->val > key) root->left=deletenode(root->left, key); //往左找

if (root->val < key) root->right=deletenode(root->right, key); //往右找

return root; //返回根

}int main();

for (int i=1; i<=11; i++)

insert(root,a[i]);

inorder(root); cout}

二叉搜尋樹的基本操作

建立乙個非負二叉搜尋樹 1表空結點 編寫查詢函式,層序遍歷函式,插入函式,刪除函式,查詢最大值最小值函式 輸入該樹和要查詢的值 輸出 如果找到,列印出 x is found 沒找到列印出 not found 列印出層序遍歷序列 刪除最大值和最小值 刪除成功輸出 x is delete 最後再進行一層...

二叉搜尋樹的基本操作

二叉搜尋樹 binary search tree 它或者是一棵空樹,或者是具有下列性質的二叉樹 若它的左子樹不空,則左子樹上所有結點的值均小於它的根結點的值 若它的右子樹不空,則右子樹上所有結點的值均大於它的根結點的值 它的左 右子樹也分別為二叉搜尋樹樹。節點設定 typedef int datat...

二叉搜尋樹的基本操作

pragma once typedef int datatype typedef struct bstreenode bstnode include include include bstnode buybstreenode datatype data pnewnode data data pnew...