链式二叉树

#include<iostream>
using namespace std;
struct Node
{
	char date;
	Node*l,*r,*parent;
};
class Tree
{
	Node *root;
	Node *Creat(Node*b);
	void Release(Node*b);
	void Preorder(Node*b);
	void Inorder(Node*b);
	void Postorder(Node*b);
	void Information(Node*b);
public:
	Tree(){root=Creat(root);}
	~Tree(){Release(root);}
	void Preorder(){Preorder(root);}
	void Inorder(){Inorder(root);}
	void Postorder(){Postorder(root);}
	void Information(){Information(root);}
};
Node*Tree::Creat(Node*b)
{
	root->parent=NULL;
	char a;
	cout<<"Input:";
	cin>>a;
	if(a==NULL) b=NULL;
	else
	{
		b=new Node;
		b->date=a;
		b->l->parent=b,b->r->parent=b;
		b->l=Creat(b->l);
		b->r=Creat(b->r);
	}
	return b;
}
void Tree::Preorder(Node*b)
{
	if(b==NULL) return;
	else 
	{
		cout<<b->date<<" ";
		Preorder(b->l);
		Preorder(b->r);
	}
}
void Tree::Inorder(Node*b)
{
	if(b==NULL) return;
	else
	{
		Inorder(b->l);
		cout<<b->date<<" ";
		Inorder(b->r);
	}
}
void Tree::Postorder(Node*b)
{
	if(b==NULL) return;
	else
	{
		Postorder(b->l);
		Postorder(b->r);
		cout<<b->date<<" ";
	}
}
void Tree::Information(Node*b)
{
	if(b->parent==NULL) cout<<"no parent!"<<endl;
	else cout<<"parent:"<<b->parent<<endl;
	if(b->l!=NULL)
	{
		cout<<"lchild:"<<b->l->date<<endl;
	}
	else cout<<"no lchild!"<<endl;
	if(b->r!=NULL) 
	{
		cout<<"rchild:"<<b->r->date<<endl;
	}
	else cout<<"no rchild"<<endl;
}
void Tree::Release(Node*b)
{
	if(b!=NULL)
	{
		Release(b->l);
		Release(b->r);
		delete b;
	}
}
int main()
{
	Tree tree;
	tree.Preorder();
	tree.Postorder();
	tree.Inorder();
	tree.Information();
	return 0;
}

猜你喜欢

转载自blog.csdn.net/Huangxu_MIKU/article/details/80424335