資料結構之二叉查詢樹的建立遍歷刪除

2021-06-27 18:28:59 字數 2140 閱讀 3415

二叉查詢樹建立,遍歷,查詢元素很容易實現。我主要寫寫刪除過程。

二叉查詢樹結點的刪除分幾種情況:

如果結點是一片樹葉,那麼直接刪除即可。如果結點有乙個兒子,則該節點可以在其父節點調整指標繞過該節點後被刪除。如果結點有兩個兒子,一般的刪除方法是用其右子樹的最小的資料代替該節點,並刪除那個結點。因為最小的那個結點不可能有左兒子,所以第二次刪除很容易實現。

**如下,寫的不太好,見笑了

#include#include#includetypedef int datatype;

typedef struct node

bintree, *tree;

// 新增結點

tree add_new_node(datatype data)

// 二叉查詢樹的插入操作

tree insert(tree root, datatype num)

else if (num > root->data)

else if (num < root->data)

return root;

}// 根據關鍵字找到該結點並返回該節點的位址

tree find(tree root, datatype key)

// 在二叉查詢樹樹中找到最小的結點的值(遞迴)

tree findmin(tree root)

// 在二叉查詢樹樹中找到最大的結點的值(迭代)

tree findmax(tree root)

return root;

}// 找到關鍵字的父節點並返回它本身的位址和父節點的位址,以及其左右子樹對應關係

tree findnodeandpos(tree root, datatype key, tree *flag,int *sign)

else if (key > p->data)

else

return p;

} return null;

}// 刪除的結點有1個或兩個結點

void delete_a_node_with_one_child(tree parent,tree dest,int pos)

// 左子樹不為空右子樹為空

else if (dest->lchild != null && dest->rchild == null)

// 左右子樹均為空

else

free(dest);

}// 刪除函式

void delete_node_with_pos(tree root, datatype key)

else

// 當待刪除結點沒有左右子樹時

if (dest->lchild == null && dest->rchild == null)

delete_a_node_with_one_child(parent, dest, pos);

// 當待刪除結點左右子樹均存在時

else if (dest->lchild!=null && dest->rchild!=null)

// 當待刪除結點只有乙個子樹時

else

delete_a_node_with_one_child(parent, dest, pos); }}

// 清空整個樹

tree makeempty(tree root)

return null;

}// 前序遍歷

void preorder(tree root)

}// 中序遍歷

void inorder(tree root)

}// 後序遍歷

void postorder(tree root)

}// 以三種遍歷方式列印出所有結點

void print(tree root)

int main()

root = insert(root, 45);

print(root);

printf("\n刪除乙個結點後\n\n");

delete_node_with_pos(root, 58);

print(root);

printf("\n");

root = makeempty(root);

system("pause");

return 0;

}

資料結構之二叉查詢樹

針對二叉查詢樹的操作 增刪改查 的時間和樹的高度成正比,比如都有10個節點的乙個樹,樹高為4和樹高為10的操作時間肯定是不同的,這個時間實際上是o lgn 二叉查詢樹的期望的樹高是lgn,從而基本動態集合的操作平均時間為 lgn 通常二叉查詢樹基於鍊錶實現,每個節點儲存左,右子節點,如果想更方便的實...

資料結構之二叉查詢樹

二叉樹成為二叉查詢樹的性質是,對於樹種的每個節點x,他的左子樹中的所有關鍵字的值均小於x的關鍵字的值,而他的右子樹中的所有關鍵字的值均大於x的關鍵字的值。這意味著,該樹的所有元素均可以是用某種統一的方式排序。tree.h pragma once we define the binary tree.s...

資料結構之二叉查詢樹

二叉查詢樹 binary search tree 又被稱為二叉搜尋樹。設x為二叉查詢樹中的乙個結點,x節點包含關鍵字key,節點x的key值記為 ke y x k ey x 如果y是x的左子樹中的乙個結點,則 ke y y ke y x k ey y ke y x 如果y是x的右子樹的乙個結點,則 ...