1. 程式人生 > 實用技巧 >劍指OFFER_把二叉樹列印成多行

劍指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;
        }
    
};