java使用歸并刪除法刪除二叉樹中節(jié)點(diǎn)的方法
本文實(shí)例講述了java使用歸并刪除法刪除二叉樹中節(jié)點(diǎn)的方法。分享給大家供大家參考。具體分析如下:
實(shí)現(xiàn)的思想很簡單:
first:找到要?jiǎng)h除的節(jié)點(diǎn)
second:如果刪除的節(jié)點(diǎn)沒有右子樹那么左子樹鏈到父節(jié)點(diǎn)
third:如果刪除的節(jié)點(diǎn)沒有左子樹那么右子樹鏈到父節(jié)點(diǎn)
forth:如果刪除的節(jié)點(diǎn)又左右孩子,那么可以歸并刪除節(jié)點(diǎn)后的子樹:方法有兩種一種是用刪除節(jié)點(diǎn)的左子樹的最右節(jié)點(diǎn),指向刪除節(jié)點(diǎn)的右子樹,另一種是用刪除節(jié)點(diǎn)的用字?jǐn)?shù)的最左節(jié)點(diǎn)指向刪除節(jié)點(diǎn)的左子樹。
Java 實(shí)現(xiàn)如下:
public void deleteByMerging(int el)
{
IntBSTNode tmp,node,p=root,prev=null;
/*find the node to be deleted*/
while(p!=null&&p.key!=el)
{
prev=p;
if(p.key<el)
p=p.right;
else p=p.left;
}
/*find end*/
node=p;
if(p!=null&&p.key==el)
{
if(node.right==null)
//node has no right child then its left child (if any) is attached to
node=node.left;
//its parent
else if(node.left==null)
//node has no left child then its right child (if any) is attched to
node=node.right
//its parent
else{
tmp=node.left;
while(tmp.right!=null)
tmp=tmp.right;
//find the rightmost node of the left subtree
tem.right=node.right;
//establish the link between the rightmost node of the left subtree and the right subtree
node=node.left;
}
if(p==root)
{
root=node;
}
else if (prev.left==p)
{
prev.left=node;
}
else prev.right=node
}
else if(root!=null)
{
System.out.println("the node is not in the tree");
}
else System.out.println("The tree is empty");
}
希望本文所述對(duì)大家的java程序設(shè)計(jì)有所幫助。
- 圖解二叉樹的三種遍歷方式及java實(shí)現(xiàn)代碼
- 圖解紅黑樹及Java進(jìn)行紅黑二叉樹遍歷的方法
- java實(shí)現(xiàn)二叉樹的創(chuàng)建及5種遍歷方法(總結(jié))
- Java實(shí)現(xiàn)二叉樹的深度優(yōu)先遍歷和廣度優(yōu)先遍歷算法示例
- Java中二叉樹數(shù)據(jù)結(jié)構(gòu)的實(shí)現(xiàn)示例
- Java實(shí)現(xiàn)求二叉樹的深度和寬度
- Java實(shí)現(xiàn)打印二叉樹所有路徑的方法
- JAVA 實(shí)現(xiàn)二叉樹(鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu))
- java實(shí)現(xiàn)二叉樹遍歷的三種方式
- 一篇文章徹底弄懂Java中二叉樹
相關(guān)文章
前置++和后置++ 運(yùn)算的詳解及實(shí)例代碼
這篇文章主要介紹了前置++和后置++ 的相關(guān)資料,并附示例代碼,幫助大家學(xué)習(xí)參考,需要的朋友可以參考下2016-09-09
Java中動(dòng)態(tài)規(guī)則的實(shí)現(xiàn)方式示例詳解
這篇文章主要介紹了Java中動(dòng)態(tài)規(guī)則的實(shí)現(xiàn)方式,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-08-08
SpringMVC的處理器攔截器HandlerInterceptor詳解
這篇文章主要介紹了SpringMVC的處理器攔截器HandlerInterceptor詳解,SpringWebMVC的處理器攔截器,類似于Servlet開發(fā)中的過濾器Filter,用于處理器進(jìn)行預(yù)處理和后處理,需要的朋友可以參考下2024-01-01
部署springboot打包不打包配置文件,配置文件為外部配置文件使用詳解
在Spring Boot項(xiàng)目中,將配置文件排除在jar包之外,通過外部配置文件來管理不同環(huán)境的配置,可以實(shí)現(xiàn)靈活的配置管理,在pom.xml文件中添加相關(guān)配置,打包時(shí)忽略指定文件,運(yùn)行時(shí)在jar包同級(jí)目錄下創(chuàng)建config文件夾,將配置文件放入其中即可2025-02-02
java 獲取數(shù)據(jù)庫連接的實(shí)現(xiàn)代碼
本篇文章是對(duì)在java中獲取數(shù)據(jù)庫連接的實(shí)現(xiàn)代碼進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-05-05
Java中Optional.of()方法及源碼解析(非常詳細(xì)!)
這篇文章主要給大家介紹了關(guān)于Java中Optional.of()方法及源碼解析的相關(guān)資料,Java中java.util .Optional類的of()方法用于獲得該Optional類中具有指定類型的指定值的一個(gè)實(shí)例,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下2024-06-06
淺談java繼承中是否創(chuàng)建父類對(duì)象
下面小編就為大家?guī)硪黄獪\談java繼承中是否創(chuàng)建父類對(duì)象。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-06-06

