八旬老人徹夜難眠,竟是為了學會二叉樹

2021-10-21 03:56:43 字數 3050 閱讀 1624

什麼是二叉樹:乙個遞迴的樹形資料結構,每個節點最多有兩個子節點;二叉樹一般都是二分查詢樹,每個節點的值大於它左子節點的值,小於它右子節點的值

遞迴遍歷:

前序遍歷:先訪問根節點,再訪問左子節點,最後訪問右子節點

上圖中前序遍歷結果:30、20、5、28、50、38、58

中序遍歷:先訪問左子節點,再訪問根節點,最後訪問右子節點

上圖中中序遍歷結果:5、20、28、30、38、50、58

後序遍歷:先訪問左子節點,再訪問右子節點,最後訪問根節點

上圖中後序遍歷結果:5、28、20、38、58、50、30

非遞迴遍歷:

常用的是利用棧的先進後出特性,不斷地將節點入棧,然後再出棧

非遞迴前序遍歷非遞迴中序遍歷兩種方式很好理解,控制遍歷時機即可,而非遞迴後序遍歷較為複雜,需要額外維護乙個最後訪問節點

二叉樹demo詳細實現原理都在注釋中,花了幾天寫的,球球你好好看看,來都來了

public class mybinarytree

else

if(value > current.value)

else

return current;

} public void addnode

(int value)

private boolean iscontainnode

(mynode current, int value)

public boolean iscontainnode

(int value)

//刪除節點比較複雜,或許會讓你看了以後瘋狂懷疑自己,請酌情檢視

private mynode deletenode

(mynode current, int value)

else

if(current.value > value)

else

} public boolean deletenode

(int value)

//中序遞迴遍歷

private void centershow

(mynode root)

} public void centershow()

public void centershowpro()

//取出棧頂元素作為根節點並刪除棧頂元素,此時棧頂元素為最左節點的值

root = nodestack.

pop();

//遍歷左節點,因為是從根往左入棧,所以出棧是從左到根

system.out.

print

(root.value +

" ")

;//找到下乙個節點,依次往右遍歷

root = root.right;}}

private void preshow

(mynode root)

} public void preshow()

public void preshowpro()

root = nodestack.

pop();

root = root.right;}}

private void aftershow

(mynode root)

} public void aftershow()

public void aftershowpro()

//取出棧頂元素但不刪除

root = nodestack.

peek()

;//如果棧頂元素的右節點為空或者它是最後一次訪問的節點

if(root.right ==

null

|| root.right == lastnode)

else}}

private int findsmallernode

(mynode root)

//節點,為了演示方便,只支援存放int數字

private class mynode

}}

測試:

public class mybinarytest

public static void deletetest()

public static void testcenter()

public static void testcenterpro()

public static void testpre()

public static void testprepro()

public static void testafter()

public static void testafterpro()

}

執行結果:

是否存在28:true

刪除28後是否還存在28:false

先序遞迴遍歷:30205

2850

3858

先序非遞迴遍歷:30205

2850

3858

中序遞迴遍歷:5

2028

3038

5058

中序非遞迴遍歷:5

2028

3038

5058

後序遞迴遍歷:5

2820

3858

5030

後序非遞迴遍歷:5

2820

3858

5030

還是那句話,家裡有條件的一定一定一定複製到idea跑一跑ok我話說完,skr~

八旬老人守護病妻24年不棄 稱愛就要守在一起

南陽9月9日電 韓章雲 趙蘭奇 在河南省社旗縣饒良鎮陳莊村,今年80歲的退休老教師薛萬成24年來照顧多病妻子的事在當地成為美談。她每年至少在醫院住四次,24年來至少花去醫療費18萬元,都快花去我退休金的三分之二了。因為她為我這個家付出的太多,花再多錢我也捨得,我不能讓她先走,我要和她守在一起。薛萬成...

8旬老人不忍久病妻子受苦將其釘死 請求判死刑

老翁釘死病妻示意圖。來自網路 中國台灣網9月23日訊息 據台灣 報道,84歲老翁王敬熙不忍年邁愛妻摔斷腿又飽受帕金森所苦,去年底迷昏妻子後,用鐵鎚將螺絲刀釘入其頭顱致死。法院一審認定王手段 但考慮他案發後自首又年邁,22日,減刑後依殺人罪判刑9年。但王一心求死,聽判後怒嗆法官為什麼不判死刑,強調將上...

京東小哥肩扛手推翻山路 為九旬老人及時送上百斤貨物

以前配送的路線被大水沖斷了,3月6日運送一單近百斤重的大冰櫃,不到1公里距離,用了2個多小時,甘肅蘭州京東幫會寧服務店的配送小哥李剛雖已有幾年配送經驗,這次還是遇到了不小的挑戰。送貨常常要翻山越嶺行程幾百公里 李剛所在的京東幫會寧服務店要負責會寧縣城及周邊鄉村的大件配送工作,年前每天都要送80 90...