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

    剑指OFFER_把二叉树打印成多行

    题目描述

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

    思路

    这道题简单的说就是二叉树的层序遍历,普遍的做法是利用BFS,然而我想提供一种魔改前序遍历的版本;

    前序遍历就是先访问根节点,然后访问左子树,最后是右子树;

    为什么对前序遍历进行魔改呢,因为这样的遍历方式是最接近层序遍历的,只不过方向是垂直的而不是水平的,

    那么我只需要记录一下深度,当垂直访问到某一深度的层次的时候,将节点值压入此深度的容器即可;

    其实方法还是很简单的,不过是自己想出来的,而且一次就AC了,还是很开心:》

    代码

    /*
    struct TreeNode {
        int val;
        struct TreeNode *left;
        struct TreeNode *right;
        TreeNode(int x) :
                val(x), left(NULL), right(NULL) {
        }
    };
    */
    class Solution {
    public:
            int maxDeep = 0;
            vector<vector<int> > ans;
            void dfs(TreeNode* node, int deep) {
                if (!node) {
                    return;
                }
                if (deep == maxDeep) {
                    vector<int> vec;
                    vec.push_back(node->val);
                    ans.push_back(vec);
                    ++maxDeep;
                } else {
                    ans[deep].push_back(node->val);
                }
                    
                dfs(node->left, deep+1);
                dfs(node->right, deep+1);
            }
            vector<vector<int> > Print(TreeNode* pRoot) {
                dfs(pRoot, 0);
                return this->ans;
            }
        
    };
    
  • 相关阅读:
    如何用grep命令同时显示匹配行上下的n行 (美团面试题目)
    Maven面试宝典
    Java经典设计模式 总览
    Java设计模式之工厂模式
    Java设计模式
    三次握手,四次挥手 具体发送的报文和状态都要掌握(阿里)
    运动与饮食结合
    健身计划
    Java中的多线程=你只要看这一篇就够了
    js禁止复制粘贴
  • 原文地址:https://www.cnblogs.com/sakurapiggy/p/13201491.html
Copyright © 2011-2022 走看看