二叉搜尋樹

2021-08-17 10:10:22 字數 3095 閱讀 5178

#ifndef _binarysearchtree_h

#define _binarysearchtree_h

struct tree_node;

typedef int element_type;

typedef struct tree_node* search_tree;

struct tree_node;

/*將一棵樹置空

實質上是樹的後序遍歷*/

search_tree make_empty(search_tree root);

/*尋找元素*/

search_tree find(search_tree root,element_type e);

/*尋找最小元素*/

search_tree find_min(search_tree root);

search_tree find_max(search_tree root);

/*插入元素

當向空樹插入元素時,樹的根節點發生變化,因此insert()返回樹的根節點

當元素已經存在於樹中,insert不操作

插入的元素必定成為新的葉子,它的父節點必定是未插入時樹的葉子*/

search_tree insert(search_tree root,element_type e);

/*刪除元素*/

search_tree delete(search_tree root,element_type e);

element_type retrieve(search_tree root);

#endif

#include

"binarysearchtree.h"

#include

#include

#include

static search_tree delete_min(search_tree root);

static void fatal_error(const char* msg);

search_tree make_empty(search_tree root)

return

null;

}search_tree find(search_tree root,element_type e)

if(e < root->element)else

if(e > root->element)else

}search_tree find_min(search_tree root)else

if(root->left ==

null)else

}search_tree find_max(search_tree root)

while(root->right!=

null)

return root;

}search_tree insert(search_tree root,element_type e)

root->element = e;

root->left = root->right =

null;

}else else

if(e > node->element)else

}node = malloc(sizeof(struct tree_node));

if(node ==

null)

node->element = e;

node->left = node->right =

null;

//判斷在葉子的左孩子還是右孩子

二叉搜尋樹 二叉搜尋樹

題目 二叉搜尋樹 time limit 2000 1000 ms j a others memory limit 32768 32768 k j a others total submission s 6945 accepted submission s 3077 problem descripti...

二叉搜尋樹 修剪二叉搜尋樹

第一反應是重構,看來別人的解答發現,其實不用重構那麼複雜。treenode trimbst treenode root,int low,int high if root val high 下一層處理完左子樹的結果賦給root left,處理完右子樹的結果賦給root right。root left ...

樹 二叉樹 二叉搜尋樹

給定乙個二叉樹,判斷其是否是乙個有效的二叉搜尋樹。假設乙個二叉搜尋樹具有如下特徵 節點的左子樹只包含小於當前節點的數。節點的右子樹只包含大於當前節點的數。所有左子樹和右子樹自身必須也是二叉搜尋樹。示例 1 輸入 2 13輸出 true 示例 2 輸入 5 14 3 6輸出 false 解釋 輸入為 ...