剑指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;
        }
    
};
posted @ 2020-06-28 10:10  樱花小猪  阅读(134)  评论(0编辑  收藏  举报