1 如果刪除的節點是葉子節點,則刪除該節點。
2 如果刪除的節點是非葉子節點,則刪除該子樹。
* @description: 二叉樹實戰
* @date: 2021/3/16
* @author: cakin
*/public class binarytreedemo
}/**
* @classname: binarytreedemo
* @description: 二叉樹
* @date: 2021/3/16
* @author: cakin
*/class binarytree
/*** 功能描述:刪除結點
** @param no 節點號
* @author cakin
* @date 2021/3/17
*/public void delnode(int no) else
} else
}/**
* 功能描述:前序遍歷
** @author cakin
* @date 2021/3/16
*/public void preorder() else
}/**
* 功能描述:中序遍歷
** @author cakin
* @date 2021/3/16
*/public void infixorder() else
}/**
* 功能描述:後序遍歷
** @author cakin
* @date 2021/3/16
*/public void postorder() else
}}/**
* @classname: heronode
* @description: 英雄節點
* @date: 2021/3/16
* @author: cakin
*/class heronode
public int getno()
public void setno(int no)
public string getname()
public void setname(string name)
public heronode getleft()
public void setleft(heronode left)
public heronode getright()
public void setright(heronode right)
@override
public string tostring()
/*** 功能描述:遞迴刪除結點
** @param no 待刪除的節點
* @author cakin
* @date 2021/3/17
* @description: 演算法描述
* 1 因為我們的二叉樹是單向的,所以我們是判斷當前結點的子結點是否需要刪除結點,而不能去判斷當前這個結點是不是需要刪除結點。
* 2 如果當前結點的左子結點不為空,並且左子結點就是要刪除結點,就將this.left = null;並且就返回(結束遞迴刪除)。
* 3 如果當前結點的右子結點不為空,並且右子結點就是要刪除結點,就將this.right= null;並且就返回(結束遞迴刪除)。
* 4 如果第2和第3步沒有刪除結點,那麼我們就需要向左子樹進行遞迴刪除。
* 5 如果第4步也沒有刪除結點,則應當向右子樹進行遞迴刪除。
*/public void delnode(int no)
// 如果當前結點的右子結點不為空,並且右子結點就是要刪除結點,就將this.right= null;並且就返回(結束遞迴刪除)。
if (this.right != null && this.right.no == no)
// 向左子樹進行遞迴刪除
if (this.left != null)
// 向右子樹進行遞迴刪除
if (this.right != null)
}/**
* 功能描述:前序遍歷
** @author cakin
* @date 2021/3/16
*/public void preorder()
//遞迴向右子樹前序遍歷
if (this.right != null)
}/**
* 功能描述:中序遍歷
** @author cakin
* @date 2021/3/16
*/public void infixorder()
// 輸出父結點
system.out.println(this);
// 遞迴向右子樹中序遍歷
if (this.right != null)
}/**
* 功能描述:後序遍歷
** @author cakin
* @date 2021/3/16
*/public void postorder()
if (this.right != null)
system.out.println(this);}}
刪除前,前序遍歷
heronode [no=1, name=宋江]
heronode [no=2, name=吳用]
heronode [no=3, name=盧俊義]
heronode [no=5, name=關勝]
heronode [no=4, name=林沖]
刪除後,前序遍歷
heronode [no=1, name=宋江]
heronode [no=2, name=吳用]
heronode [no=3, name=盧俊義]
heronode [no=4, name=林沖]
刪除前,前序遍歷
heronode [no=1, name=宋江]
heronode [no=2, name=吳用]
heronode [no=3, name=盧俊義]
heronode [no=5, name=關勝]
heronode [no=4, name=林沖]
刪除後,前序遍歷
heronode [no=1, name=宋江]
heronode [no=2, name=吳用]
二叉樹的刪除
二叉排序樹的刪除 對於一般的二叉樹來說,刪去樹中的乙個結點是沒有意義的,因為它將使以被刪除的結點為根的子樹變成森林,破壞了整棵樹的結構 但是,對於二叉排序樹,刪去樹上的乙個結點相當於刪去有序序列中的乙個記錄,只要在刪除某個結點後不改變二叉排序樹的特性即可。在二叉排序樹上刪除乙個結點的演算法如下 bt...
二叉樹刪除詳解
二叉查詢樹的刪除過程 假設要刪除樹t中的某節點z,此時對於如何刪除z要分三種情況考慮 1.z無子女 此時直接刪除z即可 z無子女 tree delete0 t,z 2.z有乙個子女 用其子節點代替自己即可 z只有乙個子女 tree delete1 t,z 3.z有兩個子女 刪除z的後繼y y不會有左...
二叉樹刪除結點
二叉樹完成刪除結點的操作.規定 1 如果刪除的節點是葉子節點,則刪除該節點 2 如果刪除的節點是非葉子節點,則刪除該子樹 思路首先先處理 考慮如果樹是空樹root,如果只有乙個root結點,則等價將二叉樹置空 然後進行下面步驟 1.因為我們的二叉樹是單向的,所以我們是判斷當前結點的子結點是否需要刪除...