⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 printtree2.h

📁 通过程序预先输入的字母
💻 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 + -