描述:给出一棵二叉树,返回其节点值的层次遍历(逐层从左往右访问)
样例:给一棵二叉树 {3,9,20,#,#,15,7} : 3 / \ 9 20 / \ 15 7 返回他的分层遍历结果: [ [3], [9,20], [15,7] ]
解题思路:这个题与普通的层序遍历之间的区别在于,要把每一层的节点分别输出。我们可以把每一层的节点都放到一个vector向量里面,然后再把每一层的vector都放入到一个总的vector里面。
实现代码:
/** * Definition of TreeNode: * public class TreeNode { * public int val; * public TreeNode left, right; * public TreeNode(int val) { * this.val = val; * this.left = this.right = null; * } * } */ class Solution { /** * @param root: The root of binary tree. * @return: Level order a list of lists of integer */ public: vector<vector<int>> levelOrder(TreeNode *root) { // write your code here vector<vector<int>> result; if (root == NULL) { return result; } queue<TreeNode *> Q; Q.push(root); while (!Q.empty()) { int size = Q.size(); vector<int> level; for (int i = 0; i < size; i++) { TreeNode *head = Q.front(); Q.pop(); level.push_back(head->val); if (head->left != NULL) { Q.push(head->left); } if (head->right != NULL) { Q.push(head->right); } } result.push_back(level); } return result; } };
做题感想:首先会用到队列的知识,对于每一个节点首先让它入队然后再出队。其次怎样把每一层的节点放入到vector当中,当时写的时候出来好多错误,不能正确的判断,怎样到一层的结束。后来费了老鼻子劲才写对。