用一个vector<int>来存储每一层的值,使用vector<TreeNode*> node_next来存储下一层的节点。遍历当前节点以提取val的值,并且判断是否有子节点,如果有子节点则将其加入到node_next中,以node_next不断更新当前的node最终提取所有的节点,类似于链表遍历</int>
while(p_node) { p_node=p_node->next; }
参考代码:
/** * struct TreeNode { * int val; * struct TreeNode *left; * struct TreeNode *right; * }; */ class Solution { public: /** * * @param root TreeNode类 * @return int整型vector<vector<>> */ vector<vector<int> > levelOrder(TreeNode* root) { // write code here vector<vector<int> > rst; if(root == NULL) return rst; vector<TreeNode*> node_stack; node_stack.push_back(root); while(node_stack.size()) { vector<int> value; vector<TreeNode*> node_next; //遍历当前层的节点; for(auto& node: node_stack) { //提取值; value.push_back(node->val); //如果有左孩子则将左孩子加入到下一层; if(node->left) node_next.push_back(node->left); //如果有右孩子则将右孩子加入到下一层; if(node->right) node_next.push_back(node->right); } //更新结果; rst.push_back(value); //更新到下一层; node_stack = node_next; } return rst; } };