且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

简单构建一个二叉树并且产生镜像

更新时间:2022-06-28 16:20:45

简单的面试题,产生一个二叉树并且产生该二叉树的镜像。

原二叉树

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);
}