二叉排序樹(二叉查詢樹 二叉搜尋樹)

2021-10-10 15:24:55 字數 2389 閱讀 5946

#include #include typedef struct node

node;

node* createnode(int value)

void addnode(node **root, int value)

else

else

}}void middleorder(node *node)

middleoder(node->leftchild);

printf("%d ", node->value);

middleoder(node->rightchild);

}node* search(node *root,int value)

else

else

}else

else

} }}

node* searchparent(node* root, int value)

else

else

}}node* searchmin(node* root)

return target;

}void delnode(node *root, int value)

else

node* parent = searchparent(root, value);

if (parent == null)

if (target->leftchild == null && target->rightchild == null)

else

free(target);

} else if (target->leftchild != null && target->rightchild != null)

else

target->value = minnode->value;

free(minnode);

} else

else if (target == parent->rightchild)

}else

else if (target == parent->rightchild)

}} }

}int main()

; node* tree_root = createnode(values[0]);

for (int i=1;i<11;i++)

middleorder(tree_root);

printf("\n");

delnode(tree_root, 14);

middleoder(tree_root);

printf("\n");

return 0;

}

二叉排序樹  新增節點 刪除節點功能  新增節點不用多說---遞迴就完事兒了

void addnode(node **root, int value)  這個要注意   不能用一級指標,至於原因大家應該清楚

刪除的時候分了下邊4中情況 

1:待刪除節點是葉子節點

delnode(tree_root, 2); or delnode(tree_root, 4);  or  delnode(tree_root, 9); or delnode(tree_root, 16);

target->leftchild == null && target->rightchild == null 判斷當前節點是父節點的左孩子還是右孩子  然後置null + free 就好

2:待刪除節點 左右孩子都有

delnode(tree_root, 3);or delnode(tree_root, 11);

target->leftchild != null && target->rightchild != null  就從target的右孩子中找到值最小的minnode  然後把value賦值給target節點  minnode刪除掉  minnode的父節點的左孩子或者右孩子 置null

3:待刪除節點只有左孩子 沒有右孩子

delnode(tree_root, 5);節點4  5的左孩子---->3的右孩子

delnode(tree_root, 10);節點9  10的左孩子---->11的左孩子

target->leftchild != null  直接把待刪除的節點的左孩子 掛到 待刪除節點的父節點上,至於是掛到左孩子還是右孩子上  得看 待刪除節點是其父節點的左孩子還是右孩子

4:待刪除節點只有右孩子 沒有左孩子

delnode(tree_root, 1);節點2  1的右孩子---->3的左孩子

delnode(tree_root, 14);節點16  14的右孩子---->11的右孩子

跟上邊一種情況一樣。。。。。。

二叉排序樹 二叉搜尋樹 二叉查詢樹

特點 結構體定義struct node 建樹 建二叉排序樹 void create node root,int t else if t root data create root lc,t else create root rc,t 前序遍歷 層序 字典序 int flag int pre 1001...

手寫二叉排序樹(二叉查詢樹 二叉搜尋樹)

在二叉排序樹中,每個根節點只能有左右兩個子節點,左子節點比根節點小,右子節點比根節點大 treeset中不允許出現相同元素。一些場景下,如果子節點和根節點相同會將子節點放到根節點的右邊 二叉搜尋樹 public class binarysearchtreeextends comparable els...

二叉搜尋樹(二叉排序樹)

描述 判斷兩序列是否為同一二叉搜尋樹序列 題目類別 樹 難度 中級 執行時間限制 10sec 記憶體限制 128mbyte 階段 入職前練習 輸入 開始乙個數n,1 n 20 表示有n個需要判斷,n 0 的時候輸入結束。接下去一行是乙個序列,序列長度小於10,包含 0 9 的數字,沒有重複數字,根據...