关于二叉树的一点问题
时间:2011-12-09
来源:互联网
二叉树写的时候出现了问题,请大家帮我看下,如果可以,粘贴运行一下最好了(我使用VLR方法建立的二叉树)代码:
复制内容到剪贴板
//
#include "stdafx.h"
#include <iostream>
#include <iomanip>
using namespace std;
template <class T>
struct Node
{
T value;
Node *rChild,*lChild;
Node(T x = 0,Node *lch = NULL,Node *rch = NULL):value(x),lChild(lch),rChild(rch){}
};
template <class T>
class BinaryTree
{
public:
BinaryTree() : refValue(0),root(NULL){}
BinaryTree(BinaryTree<T> &s)
{
this->root = Copy(s.root);
}
~BinaryTree(){ DeleteTree(root); }
void Create()
{
Create(cin,root);
}
int GetHeight(void)
{
return Height(root);
}
int Size()
{
return Size(root);
}
void PreOrder()
{
PreOrder(root, visit);
}
void InOrder()
{
InOrder(root, visit);
}
//Error 1 error C3867: 'BinaryTree<T>::visit': function call missing argument list; use '&BinaryTree<T>::visit' to create a pointer to member c:\users\syf\documents\visual studio 2008\projects\tree\tree\tree.cpp 49
//这里调用的时候出现问题,麻烦大家帮我看下
void PostOrder()
{
PostOrder(root, visit);
}
Node<T> * Find(const T &item);
private:
T refValue;
Node<T> *root;
int Size(Node<T> *subTree) const;
void visit(Node<T> *cur);
bool DeleteTree(Node<T> * &cur);
int Height(Node<T> *subTree);
Node<T> *Copy(Node<T> *subTree);
void Create(istream &in, Node<T> * &cur);
void PreOrder(Node<T> * subTree, void (*v)(Node<T> *cur));
void InOrder(Node<T> * subTree, void (*v)(Node<T> *cur));
void PostOrder(Node<T> * subTree, void(*v)(Node<T> *cur));
};
template <class T>
Node<T> * BinaryTree<T>::Copy(Node<T> *subTree)
{
if(subTree == NULL) return NULL;
Node<T> *temp = new Node<T>;
temp->value = subTree->value;
temp->lChild = Copy(subTree->lChild);
temp->rChild = Copy(subTree->rChild);
return temp;
};
template <class T>
void BinaryTree<T>::visit(Node<T> *cur)
{
cout << cur->value << " ";
};
template <class T>
bool BinaryTree<T>:: DeleteTree(Node<T> * &cur)
{
if(cur != NULL)
{
DeleteTree(cur->lChild);
DeleteTree(cur->rChild);
delete cur;
return true;
}
return false;
};
template <class T>
void BinaryTree<T>:: Create(istream &in, Node<T> * &cur)
{
T item;
in >> item;
if (item != refValue)
{
cur = new Node<T>(item);
if (cur == NULL)
{
cerr << "内存分配错误!" <<endl;exit(1);
}
Create(in, cur->lChild);
Create(in, cur->rChild);
}
else
cur = NULL;
}
//计算树的高度
template <class T>
int BinaryTree<T>::Height(Node<T> *subTree)
{
if (subTree == NULL) return 0;
else
{
int i = Height(subTree->lChild);
int j = Height(subTree->rChild);
return ((i > j) ? i+1 : j+1);
}
};
template <class T>
void BinaryTree<T>::PreOrder(Node<T> * subTree, void (*v)(Node<T> *cur))
{
if (subTree != NULL)
{
v(subTree)
PreOrder(subTree->lChild,visit);
PreOrder(subTree->rChild,visit);
}
};
template <class T>
void BinaryTree<T>:: InOrder(Node<T> * subTree, void (*v)(Node<T> *cur))
{
if (subTree != NULL)
{
InOrder(subTree->lChild,visit);
v(subTree);
InOrder(subTree->rChild,visit);
}
};
template <class T>
void BinaryTree<T>:: PostOrder(Node<T> * subTree, void(*v)(Node<T> *cur))
{
if (subTree != NULL)
{
PostOrder(subTree->lChild,visit);
PostOrder(subTree->rChild,visit);
v(subTree);
}
};
template <class T>
int BinaryTree<T>::Size(Node<T> *subTree) const
{
if (subTree == NULL) return 0;
else
return 1+Size(subTree->lChild)+Size(subTree->rChild);
};
int _tmain(int argc, _TCHAR* argv[])
{
BinaryTree<int> bin;
bin.Create();
bin.Size();
bin.GetHeight();
bin.PostOrder();
return 0;
}
代码:
// Tree.cpp : Defines the entry point for the console application.//
#include "stdafx.h"
#include <iostream>
#include <iomanip>
using namespace std;
template <class T>
struct Node
{
T value;
Node *rChild,*lChild;
Node(T x = 0,Node *lch = NULL,Node *rch = NULL):value(x),lChild(lch),rChild(rch){}
};
template <class T>
class BinaryTree
{
public:
BinaryTree() : refValue(0),root(NULL){}
BinaryTree(BinaryTree<T> &s)
{
this->root = Copy(s.root);
}
~BinaryTree(){ DeleteTree(root); }
void Create()
{
Create(cin,root);
}
int GetHeight(void)
{
return Height(root);
}
int Size()
{
return Size(root);
}
void PreOrder()
{
PreOrder(root, visit);
}
void InOrder()
{
InOrder(root, visit);
}
//Error 1 error C3867: 'BinaryTree<T>::visit': function call missing argument list; use '&BinaryTree<T>::visit' to create a pointer to member c:\users\syf\documents\visual studio 2008\projects\tree\tree\tree.cpp 49
//这里调用的时候出现问题,麻烦大家帮我看下
void PostOrder()
{
PostOrder(root, visit);
}
Node<T> * Find(const T &item);
private:
T refValue;
Node<T> *root;
int Size(Node<T> *subTree) const;
void visit(Node<T> *cur);
bool DeleteTree(Node<T> * &cur);
int Height(Node<T> *subTree);
Node<T> *Copy(Node<T> *subTree);
void Create(istream &in, Node<T> * &cur);
void PreOrder(Node<T> * subTree, void (*v)(Node<T> *cur));
void InOrder(Node<T> * subTree, void (*v)(Node<T> *cur));
void PostOrder(Node<T> * subTree, void(*v)(Node<T> *cur));
};
template <class T>
Node<T> * BinaryTree<T>::Copy(Node<T> *subTree)
{
if(subTree == NULL) return NULL;
Node<T> *temp = new Node<T>;
temp->value = subTree->value;
temp->lChild = Copy(subTree->lChild);
temp->rChild = Copy(subTree->rChild);
return temp;
};
template <class T>
void BinaryTree<T>::visit(Node<T> *cur)
{
cout << cur->value << " ";
};
template <class T>
bool BinaryTree<T>:: DeleteTree(Node<T> * &cur)
{
if(cur != NULL)
{
DeleteTree(cur->lChild);
DeleteTree(cur->rChild);
delete cur;
return true;
}
return false;
};
template <class T>
void BinaryTree<T>:: Create(istream &in, Node<T> * &cur)
{
T item;
in >> item;
if (item != refValue)
{
cur = new Node<T>(item);
if (cur == NULL)
{
cerr << "内存分配错误!" <<endl;exit(1);
}
Create(in, cur->lChild);
Create(in, cur->rChild);
}
else
cur = NULL;
}
//计算树的高度
template <class T>
int BinaryTree<T>::Height(Node<T> *subTree)
{
if (subTree == NULL) return 0;
else
{
int i = Height(subTree->lChild);
int j = Height(subTree->rChild);
return ((i > j) ? i+1 : j+1);
}
};
template <class T>
void BinaryTree<T>::PreOrder(Node<T> * subTree, void (*v)(Node<T> *cur))
{
if (subTree != NULL)
{
v(subTree)
PreOrder(subTree->lChild,visit);
PreOrder(subTree->rChild,visit);
}
};
template <class T>
void BinaryTree<T>:: InOrder(Node<T> * subTree, void (*v)(Node<T> *cur))
{
if (subTree != NULL)
{
InOrder(subTree->lChild,visit);
v(subTree);
InOrder(subTree->rChild,visit);
}
};
template <class T>
void BinaryTree<T>:: PostOrder(Node<T> * subTree, void(*v)(Node<T> *cur))
{
if (subTree != NULL)
{
PostOrder(subTree->lChild,visit);
PostOrder(subTree->rChild,visit);
v(subTree);
}
};
template <class T>
int BinaryTree<T>::Size(Node<T> *subTree) const
{
if (subTree == NULL) return 0;
else
return 1+Size(subTree->lChild)+Size(subTree->rChild);
};
int _tmain(int argc, _TCHAR* argv[])
{
BinaryTree<int> bin;
bin.Create();
bin.Size();
bin.GetHeight();
bin.PostOrder();
return 0;
}
作者: isyf 发布时间: 2011-12-09
怎么这么多问二叉树的啊;, y2 M" l# q" B+ W* F. d- [+ F4 Q" G
有时间学一下。。。
有时间学一下。。。
作者: 月夜幻影 发布时间: 2011-12-09
啊,哪个大虾过来看下啊,帮我改下错,我改得头晕目眩的……
作者: isyf 发布时间: 2011-12-09
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28