题目描述
从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行。
/* struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) { } }; */ //循环解法 class Solution { public: vector<vector<int> > Print(TreeNode* pRoot) { vector<vector<int>> v; if(pRoot == NULL) return v; queue<TreeNode *> qu; TreeNode * p = NULL; qu.push(pRoot); vector<int> t;int count = 0; while(!qu.empty()){ count = qu.size();//获取每一层的节点数 while(count--){ p = qu.front(); t.push_back(p->val); if(p->left) qu.push(p->left); if(p->right) qu.push(p->right); qu.pop(); } v.push_back(t); t.clear(); } return v; } }; //递归写法,深度优先遍历。利用栈的深度和树的高度对比 class Solution { public: vector<vector<int> > Print(TreeNode* pRoot) { vector<vector<int>> v; if(pRoot == NULL) return v; dfs(pRoot,1,v); return v; } void dfs(TreeNode* root,int depth,vector<vector<int>> &v) { if(root == NULL)return ; if(depth > v.size()) v.push_back(vector<int>()); v[depth - 1].push_back(root->val); dfs(root->left,depth + 1, v); dfs(root->right,depth + 1, v); } };