zoukankan      html  css  js  c++  java
  • 【剑指offer22 从上往下打印二叉树 & 60 把二叉树打印成多行】

    22题目描述

    从上往下打印出二叉树的每个节点,同层节点从左至右打印。
     
    层次遍历,用一个队列
    /*
    struct TreeNode {
        int val;
        struct TreeNode *left;
        struct TreeNode *right;
        TreeNode(int x) :
                val(x), left(NULL), right(NULL) {
        }
    };*/
    class Solution {
        /*
     层次遍历
     维持一个队列,将当前元素左右子节点加入队尾就完事
     将当前元素的值添加到答案中
        */
    public:
        vector<int> PrintFromTopToBottom(TreeNode* root) {
            vector<int> res;
            if(!root) return res; //初始空
            queue<TreeNode*> q;
            q.push(root);  //头节点入队
            while(!q.empty())
            {
                TreeNode* node=q.front();
                q.pop(); //当前点出队
                res.push_back(node->val);   //这一点的值加入此层的数组
                if(node->left) q.push(node->left); //为下一层准备
                if(node->right) q.push(node->right);
            }
            return res;
        }
    };

    60题目描述

    从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行。
     
    在上面一题的基础上,每一层需要有一个q.size()的循环,控制这一层的元素
    /*
    struct TreeNode {
        int val;
        struct TreeNode *left;
        struct TreeNode *right;
        TreeNode(int x) :
                val(x), left(NULL), right(NULL) {
        }
    };
    */
    class Solution {
    public:
            vector<vector<int> > Print(TreeNode* pRoot) {
                vector<vector<int>> ans;
                if(!pRoot)return ans;
                queue<TreeNode*> q;
                q.push(pRoot);
                while(!q.empty()){
                    int size = q.size();
                    vector<int> floor;
                    while(size--){
                        TreeNode *tmp = q.front();
                        q.pop();
                        floor.push_back(tmp->val);
                        if(tmp->left)q.push(tmp->left);
                        if(tmp->right)q.push(tmp->right);
                    }
                    ans.push_back(floor);
                    floor.clear();
                }
                return ans;
            }
        
    };
  • 相关阅读:
    May 1 2017 Week 18 Monday
    April 30 2017 Week 18 Sunday
    April 29 2017 Week 17 Saturday
    April 28 2017 Week 17 Friday
    April 27 2017 Week 17 Thursday
    April 26 2017 Week 17 Wednesday
    【2017-07-04】Qt信号与槽深入理解之一:信号与槽的连接方式
    April 25 2017 Week 17 Tuesday
    April 24 2017 Week 17 Monday
    为什么丑陋的UI界面却能创造良好的用户体验?
  • 原文地址:https://www.cnblogs.com/Stephen-Jixing/p/13128909.html
Copyright © 2011-2022 走看看