간단하게 두 갈래 트리를 구축하여 거울을 만든다

1561 단어
간단한 면접 문제로 두 갈래 나무가 만들어지고 이 두 갈래 나무의 거울이 만들어진다.
원 두 갈래 나무

2  3
미러링 후
1      
3  2
#include <iostream>
using namespace std;
typedef struct BinaryTreeNode
{
   char data ;
   BinaryTreeNode* left ;
   BinaryTreeNode*  right;
}BinaryTreeNode,* PBinaryTreeNode; 

class BinaryTreeManager
{
 public:
	BinaryTreeManager()
	{
		  m_root=NULL;
	}
	void Init()
	{
		m_root=CreateBinaryTree() ;
	}
	//   
	void  ShowBinaryTree(PBinaryTreeNode node)  
	{
		  if(node!=NULL)
		  {
			 ShowBinaryTree(node->left);
			 cout<<node->data<<"  ";
			 ShowBinaryTree(node->right);
		  }
	}
	//  
	void Mirror(PBinaryTreeNode node)
	{
        if(node!=NULL){
			PBinaryTreeNode tem=node->right ;
			node->right=node->left ;
			node->left=tem;
			Mirror(node->left);
			Mirror(node->right);
		}
	}
	PBinaryTreeNode GetRoot()
	{
		return m_root ;
	}
private:
	// 
	PBinaryTreeNode CreateBinaryTree()
	{
		char ch;
		PBinaryTreeNode T;
		cin>>ch ;
		// 
		if(ch=='#')
		{   
			cout<<"------"<<endl;
			T=NULL;
		}
		else
		{
			T=new BinaryTreeNode;
			T->data=ch ;
			T->left=CreateBinaryTree() ;
			T->right=CreateBinaryTree();
		}
		return T;
	}
private:
	PBinaryTreeNode m_root ;
};
void main()
{
	 BinaryTreeManager  bTManager ;
	 bTManager.Init() ;
	 PBinaryTreeNode root=bTManager.GetRoot();
	 bTManager.ShowBinaryTree(root);
	 /// 
	 bTManager.Mirror(root);
	 cout<<endl;
	 bTManager.ShowBinaryTree(root);
}

좋은 웹페이지 즐겨찾기