C語言實現二叉搜尋樹的建立 插入 刪除和查詢

2021-06-16 09:47:34 字數 2175 閱讀 5756

**如下。具體處理見注釋。個人原創,非官方。

#include #include #include #define tree_type int

#define size 15

/**定義樹形結構*/

typedef struct tree

tree_node;

/**根節點作為全域性靜態變數*/

static tree_node *root;

/**初始化樹*/

void create_tree()

/**向樹種插入資料*/

tree_node* insert(tree_node *node,tree_type value)

else

return node;

}/**顯示樹中所有節點內容*/

void show_all(tree_node *node)

}/**根據值查詢某一特定節點*/

tree_node* search(tree_node *node,tree_type value)

return result;

}/**找到某一值對應節點的父節點*/

tree_node* find_parent(tree_node *parent,tree_type value)

}if(value > parent->value && parent->right != null) //比父節點值大,訪問右子樹}}

return result;

}void delete(tree_type value)

}else if(node->right == null) //如果待刪節點只有左子樹節點

}else if(node->left == null) //如果待刪節點只有右子樹節點

}else //如果帶刪節點左右子樹節點都存在

if(new_node != node->left)

new_node->left = node->left;

if(new_node != node->right)

new_node->right = node->right;

if(parent == null)

root = new_node;

else

if(new_node_parent != null)//將原來的右子樹最左節點刪掉

new_node_parent->left = null;}}

}int main()

; int i;

for(i = 0; i < size; i++)

insert(root,list[i]);

/**顯示全部*/

show_all(root);

putchar('\n');

/**根據值查詢某節點*/

tree_node *result = search(root,14);

if(result != null)

printf("to find %d,result is %d\n",14,result->value);

else

printf("not find\n");

/**根據值查詢其父節點*/

tree_node *parent_result = find_parent(root,14);

if(parent_result != null)

printf("to find %d's parent,result is %d\n",14,parent_result->value);

else

printf("cannot find %d's parent\n",14);

/**刪除*/

delete(14); //刪除葉子節點

show_all(root);

putchar('\n');

delete(13); //刪除只有右子樹的節點

show_all(root);

putchar('\n');

delete(11); //刪除只有左子樹的節點

show_all(root);

putchar('\n');

delete(4); //刪除左右子樹都有的節點

show_all(root);

putchar('\n');

return 0;

}

C語言實現 二叉搜尋樹

什麼是二叉搜尋樹?二叉搜尋樹是一顆二叉樹,樹中的每乙個節點的值都是大於其左子樹的值小於其右子樹的值,而且其每一棵子樹都是一顆二叉搜尋樹,其中序遍歷結果是從小到大依次排列的。以下是二叉搜尋樹的相關操作的 pragma once include include include typedef char ...

建立二叉排序樹C語言實現

學會編輯 include include 二叉查詢樹結點描述 typedef int keytype typedef struct node node,pnode 往二叉查詢樹中插入結點 插入的話,可能要改變根結點的位址,所以傳的是二級指標 void inseart pnode root,keyty...

二叉樹 二叉搜尋樹的建立和插入

二叉搜尋樹又名二叉排序樹。大概簡略的思維導圖如下,方便記憶特性 基本二叉搜尋樹建立過程如下 資料結構如下 typedef struct tree tree,treenode node 為二叉樹根節點,insert為插入的節點 void create tree treenode node,tree i...