我正在尝试为我的Binary Search Tree编写析构函数,并且我知道如何递归遍历该树,但是我不知道如何在析构函数中执行此操作,以便删除每个节点。
我的标题是:
struct Node; typedef string TreeType; typedef Node * TreePtr; //Defines a Node struct Node { TreeType Info; int countDuplicates = 1; TreePtr Left, Right; }; class Tree { public: //Constructor Tree(); //Destructor ~Tree(); //Retruns true if the tree is Empty bool Empty(); //Inserts a Node into the tree bool Insert(TreeType); //Delete decides what type of delection needs to occur, then calls the correct Delete function bool Delete(Node * , Node * ); //Deletes a leaf node from the tree bool DeleteLeaf(TreePtr, TreePtr); //Deletes a two child node from the tree bool DeleteTwoChild(TreePtr); //Deletes a one child node from the tree bool DeleteOneChild(TreePtr, TreePtr); //Finds a certain node in the tree bool Find(TreeType); //Calculates the height of the tree int Height(TreePtr); //Keeps a count of the nodes currently in the tree; void Counter(); private: //Prints the nodes to the output text file in order alphabetically void InOrder(ofstream &,TreePtr); //Defines a TreePtr called Root TreePtr Root; //Defines a TreePtr called Current TreePtr Current; //Defines a TreePtr called Parent TreePtr Parent; };
我的构造函数是:
Tree::Tree() { Root = NULL; Current = NULL; Parent = NULL; }
有没有办法递归调用析构函数?如果没有,如何遍历每个节点将其删除。
void Tree::DestroyRecursive(TreePtr node) { if (node) { DestroyRecursive(node->left); DestroyRecursive(node->right); delete node; } } Tree::~Tree() { DestroyRecursive(Root); }