二叉树的层次遍历

给出一棵二叉树,返回其节点值的层次遍历(逐层从左往右访问)
样例
给一棵二叉树 {3,9,20,#,#,15,7} :

3
/
9 20
/
15 7
返回他的分层遍历结果:

[
[3],
[9,20],
[15,7]
]

分析:
广度优先遍历,队列

/**
 * Definition of TreeNode:
 * class TreeNode {
 * public:
 *     int val;
 *     TreeNode *left, *right;
 *     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> levelOrder(TreeNode *root) {
         vector>result;
        if (root == NULL) {
            return  result;
        }
        // write your code here
       
        dequeoneQueue;
        TreeNode *head = root;
        oneQueue.push_back(head);
        int currentLevel = 0;
        int currentLevelInternalCount = 1;
        int nextLevelInternalCount = 0;
        int count = 0;
        vectorlevelNums;
        while(!oneQueue.empty()) {
            head = oneQueue.front();
            oneQueue.pop_front();
            count++;
           levelNums.push_back(head->val);
            if (head->left != NULL) {
                oneQueue.push_back(head->left);
                nextLevelInternalCount++;
            }
            if(head->right != NULL) {
                oneQueue.push_back(head->right);
                nextLevelInternalCount++;
            }
             if (count == currentLevelInternalCount) {
                vector a = levelNums;
                //vectora(2,0);
                result.push_back(a);
                levelNums.clear();
                count = 0;
                currentLevelInternalCount = nextLevelInternalCount;
                nextLevelInternalCount = 0;
            }
        }
        return result;
    }
};

你可能感兴趣的:(二叉树的层次遍历)