bst_t*create()void insert(bst_t* tree, char
key)
//小駝峰命名法 好習慣 建立新結點
treenode_t* newnode = calloc(1,sizeof(treenode_t));//
用calloc好可以直接初始化為null,
//因為tree的左右子樹需要判斷是否為null
if (newnode ==null)
newnode->key = key;//
給新結點的key成員賦值
//插入結點 第一次要判斷根結點指向 不然一直指向null 改變的是curr的指向而不會是root
//後面新增新結點也是一樣的情況,必須拿prev的左右來指向新結點 不能用curr
if (tree->root ==null)
tree->root =newnode;
else
if (key < prev->key)
prev->left =newnode;
else
prev->right =newnode;
return;}
void rm(bst_t* tree, char
key)
else
if (key > curr->key)
else
break
; }
//沒找到的情況
if (curr ==null)
//第一種情況:待刪除結點度為2。移花接木
if (curr->left != null && curr->right !=null)
//替換 先把右邊最小的那個值拷貝過來,再想辦法把右邊最小值乾掉,也就是轉嫁成度為0或1的情況
curr->key = minofright->key;
prev =parent;
curr =minofright;
}//處理度為0和度為1的情況 child就是要續上的那個結點
//因為只有度為0和度為1兩種情況。左子樹存在便續左子樹,右子樹存在
//便續右子樹(即使它們會是null)
treenode_t* child = curr->left != null ? curr->left : curr->right;
if (prev == null)//
刪除整個樹的根結點的情況
tree->root =child;
//變成child 再乾掉原來的child
else
if(curr->key < prev->key)
prev->left =child;
else
prev->right =child;
free
(curr);
}
刪除二叉搜尋樹中的某個結點
刪除操作的原型為 int deletebstree pnode proot,int data 返回型別int用來表示刪除是否成功,其中pnode表示如下 typedef int datatype typedef struct bstreenode node,pnode 刪除操作的原理為 首先在二叉搜...
二叉搜尋樹 二叉搜尋樹的刪除操作
如圖刪除 7,4,2直接刪除接可以 如圖 刪除6把7拉上去 如圖 刪除3 4沒有左孩子直接返回4 所以最後的結果只是4覆蓋3 上 class solution if key root.val else if key root.val else else if root.right null else...
二叉樹刪除結點
二叉樹完成刪除結點的操作.規定 1 如果刪除的節點是葉子節點,則刪除該節點 2 如果刪除的節點是非葉子節點,則刪除該子樹 思路首先先處理 考慮如果樹是空樹root,如果只有乙個root結點,則等價將二叉樹置空 然後進行下面步驟 1.因為我們的二叉樹是單向的,所以我們是判斷當前結點的子結點是否需要刪除...