二叉排序樹的建立遍歷刪除
二叉排序樹的刪除
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...