二叉排序树操作
2012-08-21 15:43
211 查看
#include<iostream>
#include<vector>
using namespace std;
/************************************************************************/
/* 二叉排序书的操作
*/
/************************************************************************/
typedef struct PNode {
int p_value;
PNode* left_node;
PNode* right_node;
} *TNode;
//创建一个新的树节点
TNode create_node()
{
TNode node = new PNode();
if (!node) exit(0);
node->left_node = NULL;
node->right_node = NULL;
node->p_value = -1;
return node;
}
//创建树的根节点
TNode init_tree(int value)
{
TNode root = create_node();
root->p_value = value;
return root;
}
//判断一个树节点是否为空
bool empty_node(TNode node)
{
if (!node) return true;
return false;
}
//往二叉树中添加一个值,如果已经存在就不再添加
void add_node(TNode root, int value)
{
if (root->p_value > value)
{
if (root->left_node)
add_node(root->left_node, value);
else {
TNode node = create_node();
node->p_value = value;
root->left_node = node;
}
}
else if (root->p_value < value)
{
if (root->right_node)
add_node(root->right_node, value);
else {
TNode node = create_node();
node->p_value = value;
root->right_node = node;
}
}
}
//在二叉树搜索一个值是否存在
TNode search_node(TNode root, int value)
{
if (!root) return NULL;
if (root->p_value == value) return root;
if (root->p_value > value)
{
TNode node = search_node(root->left_node, value);
return node;
}else
{
TNode node = search_node(root->right_node, value);
return node;
}
return node;
}
//打印整个树节点
void print_tree(TNode root)
{
if (!root) return;
print_tree(root->left_node);
cout << root->p_value <<" ";
print_tree(root->right_node);
}
//销毁整个二叉树
void free_tree(TNode root)
{
if (!root) return;
free_tree(root->left_node);
TNode node = root->right_node;
delete root;
free_tree(node);
}
//获取二叉树的高度
int tree_depth(TNode root)
{
if (!root) return 0;
int depth;
int left_depth, right_depth;
left_depth = tree_depth(root->left_node);
right_depth = tree_depth(root->right_node);
depth = 1 + (left_depth > right_depth ? left_depth:right_depth);
return depth;
}
//二叉树的所有路径
vector<int> v;
void tree_all_path(TNode root)
{
if (root && !root->left_node && !root->right_node)
{
v.push_back(root->p_value);
for (vector<int>::iterator iter = v.begin(); iter != v.end(); iter++)
cout << *iter << " " ;
cout <<endl;
v.pop_back();
return;
}
v.push_back(root->p_value);
if (root->left_node)
tree_all_path(root->left_node);
if (root->right_node)
tree_all_path(root->right_node);
v.pop_back();
}
#include<vector>
using namespace std;
/************************************************************************/
/* 二叉排序书的操作
*/
/************************************************************************/
typedef struct PNode {
int p_value;
PNode* left_node;
PNode* right_node;
} *TNode;
//创建一个新的树节点
TNode create_node()
{
TNode node = new PNode();
if (!node) exit(0);
node->left_node = NULL;
node->right_node = NULL;
node->p_value = -1;
return node;
}
//创建树的根节点
TNode init_tree(int value)
{
TNode root = create_node();
root->p_value = value;
return root;
}
//判断一个树节点是否为空
bool empty_node(TNode node)
{
if (!node) return true;
return false;
}
//往二叉树中添加一个值,如果已经存在就不再添加
void add_node(TNode root, int value)
{
if (root->p_value > value)
{
if (root->left_node)
add_node(root->left_node, value);
else {
TNode node = create_node();
node->p_value = value;
root->left_node = node;
}
}
else if (root->p_value < value)
{
if (root->right_node)
add_node(root->right_node, value);
else {
TNode node = create_node();
node->p_value = value;
root->right_node = node;
}
}
}
//在二叉树搜索一个值是否存在
TNode search_node(TNode root, int value)
{
if (!root) return NULL;
if (root->p_value == value) return root;
if (root->p_value > value)
{
TNode node = search_node(root->left_node, value);
return node;
}else
{
TNode node = search_node(root->right_node, value);
return node;
}
return node;
}
//打印整个树节点
void print_tree(TNode root)
{
if (!root) return;
print_tree(root->left_node);
cout << root->p_value <<" ";
print_tree(root->right_node);
}
//销毁整个二叉树
void free_tree(TNode root)
{
if (!root) return;
free_tree(root->left_node);
TNode node = root->right_node;
delete root;
free_tree(node);
}
//获取二叉树的高度
int tree_depth(TNode root)
{
if (!root) return 0;
int depth;
int left_depth, right_depth;
left_depth = tree_depth(root->left_node);
right_depth = tree_depth(root->right_node);
depth = 1 + (left_depth > right_depth ? left_depth:right_depth);
return depth;
}
//二叉树的所有路径
vector<int> v;
void tree_all_path(TNode root)
{
if (root && !root->left_node && !root->right_node)
{
v.push_back(root->p_value);
for (vector<int>::iterator iter = v.begin(); iter != v.end(); iter++)
cout << *iter << " " ;
cout <<endl;
v.pop_back();
return;
}
v.push_back(root->p_value);
if (root->left_node)
tree_all_path(root->left_node);
if (root->right_node)
tree_all_path(root->right_node);
v.pop_back();
}
相关文章推荐
- 十一.二叉排序树的各种操作
- 二叉排序树(二叉查找树)的各种操作C++最新实现
- 二叉排序树的查找和插入操作 - 数据结构和算法74
- 二叉排序树的操作(建立、插入、删除和查找)
- 二叉排序树(二叉查找树)的各种操作C++最新实现
- 数据结构——二叉排序树的插入构造和删除操作
- 二叉排序树的插入、生成、删除及查找操作
- 二叉排序树的操作(C语言)
- 二叉排序树操作
- 数据结构之二叉排序树(基于引用实现基本操作)
- 二叉查找树(二叉排序树)操作大全C++实现
- 数据结构面试之六——二叉树的常见操作2(非递归遍历&二叉排序树)
- 二叉排序树的基本操作
- 二叉排序树的建立以及相关操作 C语言
- 查找(二)动态查找:二叉排序树的插入与输出操作
- 二叉排序树的实现和操作
- 二叉排序树的增删改操作
- 二叉排序树的删除操作
- 二叉排序树与文件的操作(C、C++)
- 二叉排序树删除操作