二叉樹常用的刪除法是:歸併刪除法,他有乙個很大的缺點,可能會導致增加樹的高度。
為了解決這個問題,可以採用:拷貝刪除法。
刪除用乙個值a1覆蓋另乙個值a2,然後刪除a1包含的節點。a1是要刪除的值a2的前驅(乙個節點的前驅是左子樹的最右節點值,他的直接後繼是右子樹的最左節點值)。
這樣就解決了樹增高的問題,但這種演算法也存在問題:如果它總是刪除乙個節點的直接前驅,可能會減小左子樹的高度而不影響右子樹的高度,多次刪除後可能會導致樹右偏。為了解決這個問題,可以交替的從左子樹刪除節點的前驅或者從右節點刪除它的後驅。
拷貝二叉樹
拷貝二叉樹,就是要拷貝根節點,葉子節點,第一步得先分配乙個空間給根節點,bitnode newnode bitnode malloc sizeof bitnode 將其葉子節點指向null,在判斷原樹的根節點的左節點和右節點是否為空,不為空就得複製過去,利用迭代就很容易做到。最後將新的子節點和根節點...
二叉樹刪除詳解
二叉查詢樹的刪除過程 假設要刪除樹t中的某節點z,此時對於如何刪除z要分三種情況考慮 1.z無子女 此時直接刪除z即可 z無子女 tree delete0 t,z 2.z有乙個子女 用其子節點代替自己即可 z只有乙個子女 tree delete1 t,z 3.z有兩個子女 刪除z的後繼y y不會有左...
二叉樹的刪除
二叉排序樹的刪除 對於一般的二叉樹來說,刪去樹中的乙個結點是沒有意義的,因為它將使以被刪除的結點為根的子樹變成森林,破壞了整棵樹的結構 但是,對於二叉排序樹,刪去樹上的乙個結點相當於刪去有序序列中的乙個記錄,只要在刪除某個結點後不改變二叉排序樹的特性即可。在二叉排序樹上刪除乙個結點的演算法如下 bt...