資料結構 二叉排序樹的建立遍歷刪除

2021-10-05 05:40:23 字數 2533 閱讀 7331

二叉排序樹的建立遍歷刪除

二叉排序樹的刪除

1)刪除葉子節點

//對刪除結點的各種情況的思路分析

第一種情況

(1)需求先去找到要刪除的結點targetnode .

(2)找到 targetnode的父結點parent

(3)確定targetnode 是parent 的左子結點 還是右子結點

(4)根據前面的情況來對應刪除

2. 左子結點parent.eft = null

3. 右子結點parent.right = null;

第二種情況:刪除只有一顆子樹的節點 (1)需求先去找到要刪除的結點targetnode

(2)找到targetnode的父結點parent (3)確定targetnode的子結點是左子結點還是右子結點 (4)

targetnode是parent 的左子結點還是右子結點 (5)如果targetnode 有左子結點

5.1如果targetnode 是parent 的左子結點 parent.left = targetnode.left;

5.2如果targetnode 是parent 的右子結點 parentright = targetnode.left; (6)如果targetnode有右子結點

6.1如果targetnode 是parent的左子結點 parent.left = targetnode.right;

6.2如果targetnode 是parent 的右子結點 parent. right = targetnode.right `package binarysorttree; 情況三:刪除有兩顆子樹的節點 (1)需求先去找到要刪除的結點targetnode

(2)找到targetnode的父結點parent (3)從targetnode的右子樹找到最小的結點

(4)用乙個臨時變數,將最小結點的值儲存 (5)刪除該最小結點 (6)targetnode.value=temp

//建立二叉排序樹

class binarysorttree

//查詢要刪除結點

public node search(int value)else

}//查詢要刪除結點的父結點

public node searchparent(int value)else

}/**

** @param node 傳入的結點(當做二叉排序樹的根結點

* @return 以node為根結點的二叉排序樹的最小結點值

*/public int delrighttreemin(node node)

//這時target指向最小結點

//刪除最小結點

delnode(target.value);

return target.value;

}//刪除結點

public void delnode(int value)else

//如果二叉排序樹只有乙個結點

if(root.left==null&&root.right==null)

//找到targetnode的父結點

node parent=searchparent(value);

//如果要刪除節點是葉子結點

if(targetnode.left==null&&targetnode.right==null)else if(parent.right!=null&&parent.right.value==value)

}else if(targetnode.left!=null&&targetnode.right!=null)elseelse

}else

}else else

}else}}

}}

//新增結點的方法

public void add(node node)else

}//中序遍歷

public void infixorder()else

}}

class node

//查詢要刪除的結點

/***

* @param value 希望刪除的結點的值

* @return 如果找到返回該結點,否則返回null

*/public node search(int value)else if(value=this.value&&this.right!=null)else

}}//新增結點方法

//遞迴的形式新增結點,注意需要滿足二叉排序樹的要求

public void add(node node)

//判斷傳入的結點的值和當前子樹的根結點值的關係

if(node.value}elseelse

}}//中序遍歷

public void infixorder()

system.out.println(this);

if(this.right!=null)

}@override

public string tostring() ';

}

`

資料結構40 二叉排序樹的建立與遍歷

迴圈新增節點到二叉排序樹 for int i 0 i 中序遍歷二叉排序樹 binarysorttree.infixorder class binarysorttree else 中序遍歷 public void infixorder else class node 新增節點 public void ...

資料結構 二叉排序樹

二叉排序樹是一種特殊結構的二叉樹,它作為一種表的組織手段,通常被稱為 樹表。可以作為一種排序和檢索的手段。定義 二叉排序樹或是空樹,或是具有下述性質的二叉樹 其左子樹上所有結點的資料值均小於根結點的資料值 右子樹上所有結點的資料值均大於或等於根結點的資料值。左子樹和右子樹又各是一棵二叉排序樹。對二叉...

資料結構 二叉排序樹

二叉排序樹 binarysorttree 具有下列性質的二叉樹 1 若左子樹不空,則左子樹上所有結點的值均小於它的根結點的值 2 若右子樹不空,則右子樹上所有結點的值均大於它的根結點的值 3 左 右子樹也分別為二叉排序樹 include includeusing namespace std type...