+ -
当前位置:首页 → 问答吧 → 关于二叉树的一点问题

关于二叉树的一点问题

时间:2011-12-09

来源:互联网

二叉树写的时候出现了问题,请大家帮我看下,如果可以,粘贴运行一下最好了(我使用VLR方法建立的二叉树)代码:
复制内容到剪贴板
代码:
// 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

热门下载

更多