您的位置:首页 > 其它

二叉排序树操作

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();

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  tree search struct