劍指OFFER_把二叉樹列印成多行
阿新 • • 發佈:2020-06-28
劍指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; } };