二叉搜尋樹的基本演算法

2021-08-21 21:16:20 字數 2496 閱讀 1242

今天我來介紹一下 搜尋二叉樹及其演算法。

一。首先我們要先知道什麼是搜尋二叉樹。

1.二叉搜尋樹又稱為二叉排序樹,它或者是乙個空樹。它的主要性質是

(1)若他的左子樹不為空,則左子樹上所有節點的值都小於根節點的值。

(2)若他的右子樹不為空,則右子樹上所有節點的值都大於根節點的值。

(3)它的左右子樹也分別為二叉搜尋樹。

2.它的基本演算法:查詢、插入以及刪除的普通和遞迴方法。

#pragma once

#include#include#include#include#includetypedef struct bstreenodebstreenode;

bstreenode *creatnode(int key) //建立子樹。

//普通查詢

//1:找到。

//0:沒找到。

int find(bstreenode *proot,int key)

else if(keykey) //如果小於節點的值,就往左子樹走。

else

} return 0; //迴圈出來表示沒找到。

}//遞迴查詢。

int findr(bstreenode *proot,int key)

if(key==proot->key) //若等於根節點直接返回1.

else if(keykey) //小於根節點,則遞迴左子樹。

return findr(proot->pright,key); //否則遞迴右子樹。

}//普通插入

//0:插入成功

//-1:插入失敗。

int insert(bstreenode **proot,int key)

else if(keykey) //若小於根節點,先用乙個變數儲存這個節點,在讓根節點往左子樹移。

q=p; //若大於根節點,先用乙個變數儲存這個節點,在讓根節點往右子樹移。

p=p->pright;

} if(q==null) //如果根節點為空,直接插入即可。

if(keykey) //如果空節點的父節點的值大於要插入的值,則給它的左子樹直接插入。

else if(key>q->key) }

//遞迴插入。

int insertr(bstreenode **proot,int key)

if((*proot)->key==key) //若與根節點相等,插入失敗。

else if(key<((*proot)->key)) //小於根節點的值,遞迴左子樹。

return insertr(&((*proot)->pright),key); //否則遞迴右子樹。

}//普通刪除

//0:刪除成功。

//-1:刪除失敗。

int remove(bstreenode **proot,int key)

else if(key>p->key) //若大於節點的值,向右子樹移。

else

else if(q->pright==null) //當它的父節點的右子樹為空

}else if(p->pright==null) //當節點的右子樹為空時,同理如上。

else if(q->pright==null)

}else //迴圈找最後的右子樹。

if(p->pleft=m) //若m沒變,證明m的右子樹為空。

else

}else

}} }

return -1; //若退出迴圈,則刪除失敗。

}//遞迴刪除。

int remover(bstreenode **proot,int key)

if((*proot)->key>key) //若小於根節點的值,遞迴左子樹。

else if(key>(*proot)->key) //大於根節點的值,遞迴右子樹。

else

else if((*proot)->pright==null) //右子樹為空,它的左孩子為根節點。

q=(*proot)->pleft; //當左右孩子都不為空時。先用變數記下根節點的左子樹。

while(q->pright) //迴圈找到最後的右子樹。

(*proot)->key=q->key; //此時將右子樹的值替換根節點的值。

remover(&((*proot)->pleft),q->key); //在刪除掉這個右子樹即可。

return 0; }}

void test1()

以上就是搜尋二叉樹的基本演算法。

二叉搜尋樹 二叉搜尋樹

題目 二叉搜尋樹 time limit 2000 1000 ms j a others memory limit 32768 32768 k j a others total submission s 6945 accepted submission s 3077 problem descripti...

二叉搜尋樹 修剪二叉搜尋樹

第一反應是重構,看來別人的解答發現,其實不用重構那麼複雜。treenode trimbst treenode root,int low,int high if root val high 下一層處理完左子樹的結果賦給root left,處理完右子樹的結果賦給root right。root left ...

二叉搜尋樹的基本操作

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