zoukankan      html  css  js  c++  java
  • 分行从上到下打印二叉树

    题目

      从上往下打印出二叉树的每个结点,同一层的结点按照从左到右的顺序打印。例如输入下图中的二叉树,则依次打印出8、6、10、5、7、9、11

    思路

      与从上到下打印二叉树类似https://www.cnblogs.com/tianzeng/p/10186431.html,本题在定义两个变量,next_level表示下一层要打印的节点数 ,在遍历的如果有字结点,就执行next_level加一操作,be_printed表示本层剩余要打印的节点数,如果为0,表示已经打印完,可以打印下一层。

    #include <iostream>
    #include <queue>
    using namespace std;
    
    struct tree
    {
        double data;
        struct tree *left,*right;
        tree(int d=0):data(d)
        {
            left=right=nullptr;
        }
    };
    class Solution
    {
        public:
            void create(tree *&root);
            void print(tree *root);
            tree *root;    
    };
    void Solution::create(tree *&root)
    {
        double x;
        cin>>x;
        if(x==0)
            root=nullptr;
        else
        {
            root=new tree();
            root->data=x;
            create(root->left);
            create(root->right);
        }
    }
    void Solution::print(tree *root)
    {
        if(!root)
            return;
        
        queue<tree *> q;
        q.push(root);
        int next_level=0;//下一层要打印的节点数 
        int be_printed=1;//本层要打印的节点数,开始只有一个根节点,初始化为1 
        
        while(!q.empty())
        {
            auto t=q.front();
            cout<<t->data<<" ";
            if(t->left)
            {
                q.push(t->left);
                ++next_level;
            }
            if(t->right)
            {
                q.push(t->right);
                ++next_level;
            }
            q.pop();
            --be_printed;
            
            if(!be_printed)
            {
                cout<<endl;
                be_printed=next_level;
                next_level=0;
            }
             
        }
    }
    int main()
    {
        Solution s;
        s.create(s.root);
        s.print(s.root);
        return 0;
    }
  • 相关阅读:
    Masonry代码自动布局的简单使用。
    iOS app 如何添加引导页。
    iOS应用程序发布AppStore及更新流程
    AFN的简单二次封装
    自定义tabbar(纯代码)
    自定义tabbar(storyBoard)
    GitHub tag的使用
    cvGetSize与cvSize的区别
    越界访问,调试真的很头疼
    Hadoop对文本文件的快速全局排序
  • 原文地址:https://www.cnblogs.com/tianzeng/p/10187702.html
Copyright © 2011-2022 走看看