📄 printtree2.h
字号:
using namespace std;
#include"binaryTree2.h"
void printTree()
{
cout<<"打印一棵二叉树:"<<endl;
queue<Tnode *> Q; //用于打印元素
queue<Tnode *> Qline; //用于打印斜线
Tnode * root=creatTree();
Tnode * pre=NULL;
root->pos=size(root->left);
Qline.push(root); //Qline的队列操作与Q相同
Q.push(root);
while(!Q.empty())
{
if(root->parent==NULL)
{
for(int i=1;i<=root->pos;i++)
cout<<" ";
cout<<root->data<<endl;
Q.pop();
Qline.pop();
if(root->left!=NULL)
{
Q.push(root->left);//左子进队
Qline.push(root->left);
}
if(root->right!=NULL)
{
Q.push(root->right);//右子进队
Qline.push(root->right);
}
}
else
{
while(!Qline.empty()&&level(Qline.front())==level(root))//打印斜线
{
if(Qline.front()==Qline.front()->parent->left)//是左子
Qline.front()->pos=Qline.front()->parent->pos-size(Qline.front()->right)-1;//位置=父亲位置-右子树结点个数-1
else //是右子
Qline.front()->pos=Qline.front()->parent->pos+size(Qline.front()->left)+1;//位置=父亲位置+左子树结点个数+1
if(level(pre)!=level(Qline.front()))
for(int i=1;i<=Qline.front()->pos;i++)
cout<<" ";
else
for(int i=1;i<=(Qline.front()->pos)-(pre->pos)-1;i++)
cout<<" ";
if(Qline.front()==Qline.front()->parent->left)
cout<<"/";
else
cout<<"\\";
pre=Qline.front();//记录前驱
Qline.pop();
if(pre->left!=NULL)
Qline.push(pre->left);
if(pre->right!=NULL)
Qline.push(pre->right);
}
cout<<endl;
pre=NULL;
while(!Q.empty()&&level(Q.front())==level(root))//打印结点
{
if(Q.front()==Q.front()->parent->left)
Q.front()->pos=Q.front()->parent->pos-size(Q.front()->right)-1;
else
Q.front()->pos=Q.front()->parent->pos+size(Q.front()->left)+1;
if(level(pre)!=level(Q.front()))
for(int i=1;i<=Q.front()->pos;i++)
cout<<" ";
else
for(int i=1;i<=(Q.front()->pos)-(pre->pos)-1;i++)
cout<<" ";
cout<<Q.front()->data;//打印结点数据
pre=Q.front();//记录前驱
Q.pop();
if(pre->left!=NULL)
Q.push(pre->left);//左子进队
if(pre->right!=NULL)
Q.push(pre->right);//右子进队
}
cout<<endl;
pre=NULL;
}
if(!Q.empty()&&!Qline.empty())
{
root=Q.front();//重新设置根结点
root=Qline.front();
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -