二叉樹的刪除

2021-10-22 11:52:25 字數 3468 閱讀 7555

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.因為我們的二叉樹是單向的,所以我們是判斷當前結點的子結點是否需要刪除...