二叉搜尋樹的建立 新增結點 刪除結點

2022-09-21 02:42:12 字數 1407 閱讀 5138

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.因為我們的二叉樹是單向的,所以我們是判斷當前結點的子結點是否需要刪除...