?? 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 + -