二叉查詢樹常常會考到和使用到,本文練習下它的幾個基本操作,即節點的查詢、插入和刪除及找最大值、最小值等。
1,二叉查詢樹的查詢
由於二叉查詢樹的性質是,每個節點的關鍵字值大於其左子樹的所有節點,同時小於右子樹的所有節點。因此查詢就可以利用其性質來進行。
實現**如下:
/* node struct */
class node
;node* find(node* root, const int key)
node* pos = root;
while(null != pos)
else
if (key < pos -> value)
else
}return
pos;
}
2,二叉查詢樹找最大節點和最小節點
同樣,利用二叉查詢樹的性質,有以下實現**:
node* find_max(node* root)
node* pos = root;
while (null
!= pos -> right)
return pos;
}node* find_min(node* root)
node* pos = root;
if (null
!= root -> left)
return pos;
}
3,二叉查詢樹的插入
往二叉查詢樹插入乙個節點,需要保持二叉查詢樹的性質,因此一種插入的思想是運用二叉查詢樹的查詢思想,查詢新關鍵字應該放在樹中的哪個位置,具體的實現**如下(通過下面**,可以知道在樹中可以很方便的通過遞迴來實現相關操作):
node* insert(node* root, const int key)
root -> value = key;
root -> left =
null;
root -> right =
null;
return root;
}if (key < pos -> value)
else
return root;
}
4,最後看下二叉查詢樹的刪除
刪除分兩種情況,一種是被刪節點有乙個子節點或0個子節點,另一種是被刪子節點有兩個子節點。對於前一種情況,處理較為簡單,直接刪除相應節點,若其有乙個子節點,則將該子節點掛載到相應節點的父節點上;對於第二種情況,處理更複雜一些,一種處理方式是,將該節點的右子樹的最小節點的關鍵字賦給當前節點,隨後遞迴的在右子樹中刪除該最小節點,這樣會一直遞迴到被刪除的節點只有乙個子節點或沒有子節點。
在《資料結構與演算法分析》上截兩個刪除示意圖如下:
具體實現**如下:
node* delete(node* root, const int key)
node* pos =
null;
if (key < root -> value)
else
if (key > root -> value)
else
// find the node
else
else
if (null
!= root -> right)
delete pos;
pos =
null;}}
return root;
}
二叉樹節點的查詢
區 package 二叉樹節點的查詢 public class binarytree public treenode getroot 前序 public void frontshow 中序 public void midshow 後序 public void aftershow 前序查詢 publi...
二叉樹節點的插入與刪除
1 先定義乙個二叉樹節點 templateclass treenode treenode t ele 2 再進行二叉樹的插入以建立乙個二叉樹 若二叉樹為空,直接建立根節點儲存資料即可 若不為空,當新元素小於父節點時,根據二叉搜尋樹特點,需要作為父節點左子樹,反之作為右子樹 bool insert t...
二叉查詢樹 插入 刪除 查詢
二叉查詢樹是滿足以下條件的二叉樹 1.左子樹上的所有節點值均小於根節點值,2右子樹上的所有節點值均不小於根節點值,3,左右子樹也滿足上述兩個條件。二叉查詢樹的插入過程如下 1.若當前的二叉查詢樹為空,則插入的元素為根節點,2.若插入的元素值小於根節點值,則將元素插入到左子樹中,3.若插入的元素值不小...