以下是二叉樹刪除節點的**,c primer plus 第5版中的第17章的原**
bool deleteitem(const item *pi,tree *ptree)
static void deletenode(node **ptr)
/*ptr 是指向目標節點的父節點指標成員的位址 */
else if((*ptr)->right==null)
else /*被刪成員有兩個子節點 */
}pair型別的宣告如下:
typedef struct pair
pair;
node型別的宣告如下:
typedef struct nodenode;
原來想著deleteitem()函式中,刪除節點呼叫的是通過if語句後呼叫deletenode(&look.parent->right)或(&look.parent->left),
而不直接呼叫(&look.child);自作聰明的將原**中的deleteitem()函式修改後如下:
bool deleteitem(const item *pi,tree *ptree)
發現程式不能正確刪除節點。除錯過程中,發現deletenode()函式返回前,*ptr已經指向了他的乙個子樹,但是函式返回後,發現ptree裡面對應的節點指向了一段亂碼。想來想去終於想明白,原來&look.child值是look.child指標所在的位址,而&look.prarent->left值是樹中某個節點的位址。使用&look.child做為引數時,deletenode()函式處理完後,look.child值被修改,而樹中的節點指向的位址並未修改。但是該位址的資料已被釋放,故會顯示亂碼。使用&look.parenet->left(right)時,修改的就是樹中某個節點的值。能達到預期目的。
大學時,老師曾說過指標是c語言的精髓。現在看來,精髓不是那麼容易掌握的。
2023年6月6日,大學畢業後的第14個年頭,花費了2個月的空閒時間後,終於看完了人生第一本程式設計書籍《c primerplus》第五版,自己所學雖非計算機專業,但一直對程式設計有這特別的嚮往,工作以來斷斷續續看過一些書,但一直沒完整看完過一本,今天中午看完第一本,回想2個月來每天晚上熬夜到0點的堅持,不由感嘆萬分。今天留個記號,以後繼續加油。
二叉樹的一些問題
二叉樹的先序遍歷 遞迴 void preorder btnode ptr 二叉樹中序遍歷 遞迴 void inorder btnode ptr 二叉樹後序遍歷 遞迴 void pastorder btnode ptr 先序遍歷二叉樹 非遞迴 void nicepastorder btnode ptr...
關於二叉樹的一些問題
tips 關於二叉樹的絕大多數問題都可以用遞迴方法來實現,dfs。一位二叉樹根節點去掉之後又分為兩個子樹,對於子樹本身也可以看左二叉樹來處理。所以遞迴可以說很好用了 二叉樹的建立 public class bittree public bittree int data public static b...
二叉樹 路徑搜尋中的一些問題
目錄前言 1 求二叉樹的最大深度 leetcode104 2 求二叉樹的最小深度 leetcode111 3 求二叉樹的正向 逆向數字路徑和 leetcode129 4 求二叉樹的節點路徑和 leetcode437 5 小結 重要 二叉樹的路徑搜尋就是乙個簡易版的行程回溯演算法,之所以是簡易版是因為...