C 實現二叉查詢樹以及二叉樹的刪除

2021-10-09 04:58:21 字數 3923 閱讀 7595

首先需要知道二叉樹的基礎知識,比父節點小的元素放在左邊,大的放在右邊

對二叉樹進行遍歷查詢

沒有找到返回-1

二叉樹的節點刪除難點就在於要分類討論的地方太多了,容易混亂

1.前提是刪除的節點得存在(使用上面提到的二叉查詢樹)

2.首先需要找到需要刪除的節點

3.需要找到刪除節點的父節點

**實現如下

之後就需要分類進行討論了

**裡面的注釋非常的詳細了

整體刪除節點方法的**如下

public

void

delete

(int

item)

else

if(item > currnode.item)

else

}/******下面進行分類討論******/

//1.當要刪除的節點既沒有左節點也沒有右節點時

if(currnode.leftnode ==

null

&& currnode.rightnode ==

null

)//2.為根節點時

else

}//2.當要刪除的節點只有左節點時

else

if(currnode.leftnode !=

null

&& currnode.rightnode ==

null)}

//3.當要刪除的節點只有右節點時

else

if(currnode.leftnode ==

null

&& currnode.rightnode !=

null)}

//4.當刪除的節點既有左又有右節點時

else

currnode.rightnode = tmp;

}//右邊時

else

if(currnode.item > parentnode.item)

currnode.leftnode = tmp;

}//為根節點時

else

currnode.leftnode = tmp;}}

}}

class

program

;mytree mytree =

newmytree

(arr)

; console.

writeline

("尋找到的元素:"

+mytree.

finditem(4

)); console.

writeline

("刪除前的中序遍歷:");

mytree.

ordershow

(mytree.rootnode)

; console.

writeline()

; mytree.

delete(4

);console.

writeline

("刪除後的中序遍歷:");

("尋找到的元素:"

+mytree.

finditem(4

)); console.

writeline

("刪除前的中序遍歷:");

mytree.

ordershow

(mytree.rootnode)

; console.

writeline()

; mytree.

delete(4

);console.

writeline

("刪除後的中序遍歷:");

mytree.

ordershow

(mytree.rootnode)

; console.

readkey()

;}}class

node

}class

mytree

}//建立二叉樹

private

void

addnode2tree

(int

item)

while

(true

)else

}else

else}}

}//尋找二叉樹中的元素

public

int finditem

(int

item)

else

if(item < node.item)

else

if(node ==

null)}

}//刪除二叉樹中的元素

public

void

delete

(int

item)

else

if(item > currnode.item)

else

}/******下面進行分類討論******/

//1.當要刪除的節點既沒有左節點也沒有右節點時

if(currnode.leftnode ==

null

&& currnode.rightnode ==

null

)//2.為根節點時

else

}//2.當要刪除的節點只有左節點時

else

if(currnode.leftnode !=

null

&& currnode.rightnode ==

null

)//3.當要刪除的節點只有右節點時

else

if(currnode.leftnode ==

null

&& currnode.rightnode !=

null

)//4.當刪除的節點既有左又有右節點時

else

currnode.rightnode = tmp;

}//右邊時

else

if(currnode.item > parentnode.item)

currnode.leftnode = tmp;

}//為根節點時

else

currnode.leftnode = tmp;}}

}}//中序遍歷

public

void

ordershow

(node rootnode)}}

}

本篇文章參考:

二叉樹 二叉查詢樹

構建二叉樹,判斷是否為二叉查詢樹,遞迴先序遍歷,非遞迴中序遍歷 include include include include using namespace std 二叉樹結點 struct treenode 鍊錶結點 struct listnode struct tempnodetempnode...

二叉樹 二叉查詢樹

二叉樹 binary tree 一種樹型結構,每個節點最多擁有兩個節點。如下圖 幾種型別的二叉樹 1.full binary tree 每個節點的孩子數 是 0 或者 2.對高度沒有要求。如下圖 2.perfect binary tree 這個就是最完美的樹,顧名思義,所有葉子節點都有相同的深度,並...

樹(樹,二叉樹,二叉查詢樹)

1.定義 n n 0 個結點構成的有限集合。當n 0時,稱為空樹 2.對於任一棵非空樹 n 0 它具備以下性質 1 樹中有乙個稱為 根 root 的特殊結點,用 r 表示 2 其餘結點可分為m m 0 個互不相交的有限集t1,t2,其中每個集合本身又是一棵樹,稱為原來樹的子樹。3.樹的一些性質 1 ...