首先需要知道二叉樹的基礎知識,比父節點小的元素放在左邊,大的放在右邊
對二叉樹進行遍歷查詢
沒有找到返回-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 ...