今天我來介紹一下 搜尋二叉樹及其演算法。
一。首先我們要先知道什麼是搜尋二叉樹。
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 最後再進行一層...