Given a binary tree, return the level order traversal of its nodes' values. (ie, from left to right, level by level).
For example:
Given binary tree {3,9,20,#,#,15,7}
,
3 / \ 9 20 / \ 15 7
return its level order traversal as:
[ [3], [9,20], [15,7] ]
#include<iostream> #include<vector> using std::vector; struct TreeNode { int val; TreeNode *left; TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) {} }; class Solution { public: vector<vector<int>> levelOrder(TreeNode *root) { vector<vector<int>> vviResult,vviLeft,vviRight; int nSizeLeft,nSizeRight; if (root == NULL) return vviResult; vviLeft = levelOrder(root->left); vviRight = levelOrder(root->right); nSizeLeft = vviLeft.size(); nSizeRight = vviRight.size(); if (nSizeLeft >= nSizeRight) { vviResult.insert(vviResult.end(), vviLeft.begin(), vviLeft.end()); for (int nTemp = 0; nTemp < nSizeRight; nTemp++) { vviResult[nTemp].insert(vviResult[nTemp].end(), vviRight[nTemp].begin(), vviRight[nTemp].end()); } } else { vviResult.insert(vviResult.end(), vviRight.begin(), vviRight.end()); for (int nTemp = 0; nTemp < nSizeLeft; nTemp++) { vviResult[nTemp].insert(vviResult[nTemp].begin(), vviLeft[nTemp].begin(), vviLeft[nTemp].end()); } } vector<int> viInsert(1, root->val); vviResult.insert(vviResult.begin(),viInsert); return vviResult; } }; TreeNode* Build_Binary_Tree() { char chValue; std::cin >> chValue; if (chValue == '#') { return NULL; } TreeNode *TNpTree = (TreeNode*)malloc(sizeof(TreeNode)); TNpTree->val = (int)(chValue - '0'); TNpTree->left = Build_Binary_Tree(); TNpTree->right = Build_Binary_Tree(); return TNpTree; } int main() { TreeNode *TNpTree; Solution SoFunction; vector<vector<int>> vviResult; TNpTree = Build_Binary_Tree(); vviResult = SoFunction.levelOrder(TNpTree); system("pause"); }