二叉查詢樹節點的查詢 插入和刪除

2021-07-02 21:44:07 字數 1896 閱讀 5260

二叉查詢樹常常會考到和使用到,本文練習下它的幾個基本操作,即節點的查詢、插入和刪除及找最大值、最小值等。

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.若插入的元素值不小...