【发布时间】:2014-10-19 03:57:36
【问题描述】:
我有一个问题需要帮助:
编写一个程序来计算扩展二叉树的内部路径长度。使用它来凭经验调查在随机生成的二叉搜索树中搜索的平均键比较次数。
编辑:
所以我想出了一个用于二叉树的 C++ 类
#include <iostream>
/*Binary tree class based on the struct. Includes basic functions insert, delete, search */
struct node
{
int data;
node *left;
node *right;
};
class binarytree{
public:
binarytree();
~binarytree();
void insert(int key);
node *search(int key);
void destroy_tree();
private:
void destroy_tree(node *leaf);
void insert(int key, node *leaf);
node *search(int key, node *leaf);
node *root;
};
binarytree::binarytree(){
root = NULL;
}
binarytree::~binarytree(){
destroy_tree();
}
void binarytree::destroy_tree(node *leaf)
{
if(leaf!=NULL)
{
destroy_tree(leaf->left);
destroy_tree(leaf->right);
delete leaf;
}
}
void binarytree::insert(int key, node *leaf){
if(key < leaf->data){
if(leaf->left!=NULL)
insert(key, leaf->left);
else{
leaf->left = new node;
leaf->left->data=key;
leaf->left->left=NULL;
leaf->left->right=NULL;
}
}
else if(key>=leaf->data){
if(leaf->right!= NULL)
insert(key, leaf->right);
else{
leaf->right = new node;
leaf->right->data=key;
leaf->right->left=NULL;
leaf->right->right=NULL;
}
}
}
node *binarytree::search(int key, node *leaf){
if(leaf!=NULL){
if(key==leaf->data)
return leaf;
if(key<leaf->data)
return search(key, leaf->left);
else
return search(key, leaf->right);
}
else return NULL;
}
我之前的问题是我在实施方面需要帮助。现在,如果我的二叉树实现是正确的(如果不是,请随时告诉我),有人能帮我找到计算扩展二叉树内部路径长度的算法吗?我认为我的实现应该涵盖扩展二叉树,但我不确定如何找到内部路径长度。我在整个互联网上都看过,但似乎没有人能够解释它或有一种算法来找到它。
再次提前感谢您的帮助!我真的很感激!
【问题讨论】:
标签: java c++ algorithm binary-tree graph-algorithm