資料結構 二叉搜尋樹

2021-08-13 04:59:51 字數 3384 閱讀 1710

/*

* 二叉搜尋樹

* * 左節點的數比根節點的數小,右邊的數要比更節點數大

*/public class binarytree

/** 按照規則:左邊的數比根節點小,右邊的數比根節點大

* 先進行反覆比較,一直到最後和葉子節點比較,選擇插在左還是右

*/public

void insert ( int data )

current = root ;

while ( current !=

null )

}//比他大,往右

else}}

}public node find ( int data )

//往右

else

if ( current.

data

<

data )

//既不大又不小,那就是=嘍,返回此節點

else

}else

//執行到這,說明current已為null , 沒找到

return

null ;

}//找最大,通常情況下最大值在樹的最右分支上

public node findmax ()

return

parent ;

}public node findmin ()

return

parent ;}/*

** 二叉樹的刪除要考慮4種情況:

** 1.被刪除的節點是葉子結點 :直接賦為null

* 2.被刪除的節點只有左子節點:左子節點上來

* 3.被刪除的節點只有右子節點:右子節點上來

* 4.被刪除的結點有兩個節點:取其右子節點的左葉子節點(最後乙個)上來

* (如果其右子節點是葉子結點或者沒有左子節點,直接將右子節點提上來)

*/public boolean delete ( int data )

//往右

else

}//跳出迴圈代表找到要刪除的資料

//1.判斷是否是第一種情況

if ( current.left ==

null

&& current.right ==

null )

else

else

current =

null ;

return

true ;}}

//2.判斷是否是第二種

if ( current.left !=

null

&& current.right ==

null )

else

else

return

true ;}}

//3.判斷是否為第三種

if ( current.left ==

null

&& current.right !=

null )

else

else

return

true ;}}

//4 。第四種 (最麻煩的一種)

if ( current.left !=

null

&& current.right !=

null )

//如果條件成立,代表此時要刪除的節點的右子節點沒有左子節點

if ( isnull ==

true )

else

}//執行到這說明有左子節點,找到右節點的葉左葉子結點(也叫中序後繼節點)

while ( son.left !=

null )

//迴圈結束,代表找到了此時son就是最後的節點

sonp.left =

null ;//抹除son父節點對其的引用

son.right = current.right ;//將要刪除的節點的右引用轉移到son身上來

son.left = current.left ;

if ( current == root )

else

else

return

true ;}}

//如果真能執行到這說明上面**都不符合只能false了

return

false ;

}public

void display ()

//使用遞迴遍歷

public

void frontdisplay ( node next )

}//中序:左根右

public

void middisplay ( node next )

}//後序:左右根

public

void lastdisplay ( node next )

}public

void leveldisplay ()

if ( current.right !=

null )

}system.out.println ( );

}// ------------------------------------

//非遞迴遍歷

//中序 左 根 右

public

void mid ( node n )

//跳出迴圈代表遍歷左子節點完畢,左子節點都入棧了

if ( s.isempty () !=

true )}}

//先序

public

void front ( node n )

if ( s.isempty () !=

true )}}

//後序(沒寫出來)

public

void last ( node n )

}

stack

public

class stack

n.next = top ;

top = n ;

}public node pop ()

top = top.next ;

return temp ;

}public boolean isempty ()

}

queue

public class queue

public void add ( node n )

rear.next = n ;

rear = n;

} public node delete ()

node temp = front ;

front = front.next ;

return temp ;

} public boolean isempty () }

**

二叉搜尋樹c 資料結構二叉搜尋樹

在n個動態的整數中搜尋某個整數?檢視其是否存在 假設使用動態陣列存放元素,從第 0 個位置開始遍歷搜尋,平均時間複雜度 o n 如果維護乙個有序的動態陣列,使用二分搜尋,最壞時間複雜度 o logn 但是新增 刪除的平均時間複雜度是 o n 針對這個需求,有沒有更好的方案?今天我們主要講的就是二叉搜...

資料結構(二叉搜尋樹)

二叉搜尋樹是一種可以高效完成以下操作的樹型的資料結構 插入乙個值 查詢是否含有某個值 刪除某個值 它儲存節點的資料資訊時,遵循以下規則,左子樹的值 根節點值 右子樹的值 下面是基本的二叉搜尋樹的實現 include include include includeusing namespace std...

資料結構 二叉搜尋樹

二叉搜尋樹的所有節點都滿足左子樹上的所有節點都比自己小,而右子樹上的所有節點都比自己大這一條件。當刪除某個節點時,需要根據下面幾種情況分別進行處理 需要刪除的節點沒有左兒子,那麼就把右兒子提上去。需要刪除的節點的左兒子沒有右兒子,那麼就把左兒子提上去。以上兩種情況都不滿足的話,就把左兒子的子孫 左子...