二叉樹搜尋樹具有較高的搜尋效率,並能支援插入和刪除運算
性質:1.若左子樹不空,則左子樹上所有節點的關鍵字值均小於根節點的關鍵字值
2. 若右子樹不空,則右子樹上所有節點的關鍵字值均大於根節點的關鍵字值
3. 左右子樹也分別是二叉搜尋樹
/**
* 二叉搜尋樹*/
#include using namespace std;
class treenode;
class bstree
//獲取二叉搜尋樹的根節點
treenode* searchtree(int x);
bool deletetree(int x); //刪除元素x
void preorder(); //先序遍歷二叉樹
void preorder(treenode*);
void inorder(); //中序遍歷二叉樹
void inorder(treenode*);
void backorder(); //後序遍歷二叉樹
void backorder(treenode*);};
bstree::bstree(int x)
bstree::~bstree()
void bstree::clear(treenode *r)}
bool bstree::inserttree(int x)
else if(x>p->element)
else
else if(p->element>q->element)
else
void bstree::preorder(treenode *r)}
void bstree::inorder()
void bstree::inorder(treenode *r)}
void bstree::backorder()
void bstree::backorder(treenode *r)}
treenode* bstree::searchtree(int x)
else
}cout<<"我們沒有找到"if(p->lchild&&p->rchild) //p節點有兩個非空子樹
p->element=s->element;
p=s;
q=r;
}if(!p)
return false;
if(p->lchild)
else
if(p==root)
root=c;
else if(p==q->lchild)
else
delete p;
return true;}
int main()
二叉搜尋樹 二叉搜尋樹
題目 二叉搜尋樹 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 輸入 2 13輸出 true 示例 2 輸入 5 14 3 6輸出 false 解釋 輸入為 ...