zoukankan      html  css  js  c++  java
  • [剑指Offer] 把二叉树打印成多行

    问题描述

    从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行。

    分析

    方法一 层与层之间用NULL分隔

          5
        /   
       3     7
      /    / 
     2   4 6   8
    

    队列中元素变化

    5#
    #37
    37#
    7#24
    #2468
    2468
    
    vector<vector<int> > Print(TreeNode* pRoot) {
        vector<vector<int>> result;
        if (pRoot == NULL) return  result;
    
        queue<TreeNode*> q;
        q.push(pRoot);
        q.push(NULL);
    
        vector<int> v;
    
        while (!q.empty()) {
            TreeNode* tmp = q.front();
            q.pop();
    
            if (tmp == NULL) {
                result.push_back(v);
                v.clear();
            } else {
                v.push_back(tmp->val);
            }
    
            if (tmp && tmp->left) {
                q.push(tmp->left);
            }
            if (tmp && tmp->right) {
                q.push(tmp->right);
            }
    
            if(tmp == NULL && !q.empty()) { //队列为空后不再添加NULL
                q.push(NULL);
            }
        }
    
        return result;
    }
    

    方法二 统计每一层的元素个数

    vector<vector<int> > Print(TreeNode* pRoot) {
        vector<vector<int>> result;
        if (!pRoot) return  result;
    
        queue<TreeNode*> q;
        q.push(pRoot);
    
        while (!q.empty()) {
            int count = q.size();
            vector<int> v;
            while (count--) {
                TreeNode* node = q.front();
                q.pop();
    
                v.push_back(node->val);
    
                if (node->left) q.push(node->left);
                if (node->right) q.push(node->right);
            }
            result.push_back(v);
        }
    
        return result;
    }
    
  • 相关阅读:
    洛谷 P1972 [SDOI2009]HH的项链
    洛谷P1494 BZOJ2038【国家集训队】小Z的袜子
    联合体以及如何调出内存窗口
    利用C语言结构体模拟一个简单的JavaBean
    结构体赋值
    C语言结构体赋值2
    结构体所占内存大小
    C语言结构体的引入
    堆的申请和释放2
    堆的申请和释放
  • 原文地址:https://www.cnblogs.com/arcsinw/p/12986208.html
Copyright © 2011-2022 走看看